【发布时间】:2018-08-30 16:23:01
【问题描述】:
我想看看是否有人知道如何在 SQL Server 2016 中使用“row_num”列作为序列开始/结束时的指示符来获取每个“id”中的最大和最小日期。
下面的屏幕截图在“min_date”和“max_date”列中显示了所需的输出。
任何帮助将不胜感激。
【问题讨论】:
标签: sql sql-server tsql sql-server-2016
我想看看是否有人知道如何在 SQL Server 2016 中使用“row_num”列作为序列开始/结束时的指示符来获取每个“id”中的最大和最小日期。
下面的屏幕截图在“min_date”和“max_date”列中显示了所需的输出。
任何帮助将不胜感激。
【问题讨论】:
标签: sql sql-server tsql sql-server-2016
您可以使用窗口化的 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;
【讨论】:
试试类似的东西
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
【讨论】: