【问题标题】:Max dates for each sequence within partitions分区内每个序列的最大日期
【发布时间】:2018-08-30 16:23:01
【问题描述】:

我想看看是否有人知道如何在 SQL Server 2016 中使用“row_num”列作为序列开始/结束时的指示符来获取每个“id”中的最大和最小日期。

下面的屏幕截图在“min_date”和“max_date”列中显示了所需的输出。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server tsql sql-server-2016


    【解决方案1】:

    您可以使用窗口化的 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

    【讨论】:

      【解决方案2】:

      试试类似的东西

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-30
        • 1970-01-01
        • 1970-01-01
        • 2019-12-26
        • 2021-12-19
        • 1970-01-01
        • 2014-11-21
        • 1970-01-01
        相关资源
        最近更新 更多