Максимальные даты для каждой последовательности в разделах - PullRequest
0 голосов
/ 30 августа 2018

Хотелось бы узнать, есть ли у кого-нибудь идея, как получить максимальную и минимальную даты в каждом 'id', используя столбец 'row_num' в качестве индикатора, когда последовательность запускается / заканчивается в SQL Server 2016.

На снимке экрана ниже показан желаемый результат в столбцах min_date и max_date.

sample dataset

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Попробуйте что-то вроде

SELECT 
    Q1.id, Q1.cat, 
    MIN(Q1.date) AS min_dat, 
    MAX(Q1.date) AS max_dat 
FROM 
    (SELECT 
         *, 
         ROW_NUMBER() OVER (PARTITION BY id, cat ORDER BY [date]) AS r1, 
         ROW_NUMBER() OVER (PARTITION BY id ORDER BY [date]) AS r2
    ) AS Q1
GROUP BY 
    Q1.id, Q1.r2 - Q1.r1
0 голосов
/ 30 августа 2018

Вы можете использовать оконный MIN / MAX:

WITH cte AS (
  SELECT *,SUM(CASE WHEN row_num > 1 THEN 0 ELSE 1 END) 
         OVER(PARTITION BY id, cat ORDER BY date_col) AS grp
  FROM tab
)
SELECT *, MIN(date_col) OVER(PARTITION BY id, cat, grp) AS min_date,
          MAX(date_col) OVER(PARTITION BY id, cat, grp) AS max_date
FROM cte
ORDER BY id, date_col, cat;

Rextester Demo

...