Asaf Shay Ответов: 3

Как группировать и получать значения из определенных строк


привет у меня есть эта таблица origianl:
type---startDate---endDate---eatingDate
  1-----2011--------2012-------1979
  1-----2012--------2013-------1980
  1-----2013--------2014-------
  2-----2014--------2015-------1982 
  3-----2015--------2016--------1983
  1-----2016--------2017-------1984
  1-----2017--------2018-------1985

результат, которого я хочу :
type---startDate---endDate---eatingDate
  1-----2011--------2014--------
  2-----2014--------2015--------1982 
  3-----2015--------2016--------1983
  1-----2016--------2018--------1985

это один случай, который я хочу решить,
другой случай-это когда в строке 3 таблицы origianl в таблице eatingDate значение равно 1981, поэтому результат будет
type--startDate---endDate---eatingDate
  1-----2011--------2014-------1981
  2-----2014--------2015-------1982 
  3-----2015--------2016-------1983
  1-----2016--------2018--------1985

Примечание : количество строк, имеющих один и тот же тип в неизвестном

я пробую некоторые вещи, но у меня нет ни малейшего представления, как решить эту проблему
я использую sql server

Что я уже пробовал:

я пробую некоторые вещи, но у меня нет ни малейшего представления, как решить эту проблему

CHill60

Поделитесь кодом, который вы пробовали - таким образом, мы также узнаем, как называется таблица

3 Ответов

Рейтинг:
2

CHill60

Чтобы узнать больше о группе, перейдите по следующим ссылкам:
Группировка по (Transact-SQL) | Microsoft Docs[^]
Группировка по (Transact-SQL) | Microsoft Docs[^]

Вот как я это сделал:

declare @table table (
	[type] int,
	startDate int,
	endDate int,
	eatingDate int )

insert into @table ([type],startDate,endDate,eatingDate) values
(1,2011,2012,1979),
(1,2012,2013,1980),
(1,2013,2014,nulll ),
(2,2014,2015,1982 ),
(3,2015,2016,1983)

select [type], min(startDate), max(endDate), max(eatingDate) from @table GROUP BY [type]

Обратите внимание на квадратные скобки вокруг [type] - это зарезервированное слово, поэтому вам нужны скобки, когда вы используете его в качестве имени столбца


Рейтинг:
1

Asaf Shay

это не очень хорошо, потому что он будет группироваться по типу 1 в начале, а также по типу 1 в конце


CHill60

Не публикуйте комментарии в качестве решений - используйте функцию "есть вопрос или комментарий?" ссылку на пост.

Рейтинг:
0

Wendelius

Если я правильно понял ваш вопрос, вы можете использовать иерархический запрос для получения минимума и максимума в непрерывном диапазоне и группы по результатам. Рассмотрим следующий пример

WITH Hier (type, startdate, enddate, eatingdate) AS (
   SELECT t.type, t.startdate, t.enddate, t.eatingdate
   FROM TableName t
   WHERE NOT EXISTS (SELECT 1 
                     FROM TableName t2 
                     WHERE t2.enddate = t.startdate 
                     AND   t2.type = t.type)
   UNION ALL
   SELECT t.[type], h.startdate, t.enddate, t.eatingdate
   FROM hier      h, 
        TableName t
   WHERE t.startdate = h.enddate
   AND   t.type = h.type
) 
SELECT h.type, h.startdate, max(h.enddate), max(h.eatingdate)
FROM hier h
GROUP BY h.type, h.startdate
ORDER BY 2, 1