【问题标题】:Group By Date Range of Sequenced Only仅排序的按日期范围分组
【发布时间】:2015-04-06 13:39:17
【问题描述】:

如果排序中断,我正在尝试生成日期范围序列并将日期放在第二行。

fldDate        TotalNo
2015-04-01     10
2015-04-02     10
2015-04-03     10
2015-04-04     10
2015-04-05     10
2015-04-06     10
2015-04-07     10
2015-04-08     10
2015-04-09     12
2015-04-10     12
2015-04-11     12
2015-04-12     12
2015-04-20     12
2015-04-21     12
2015-04-22     12
2015-04-23     12
2015-04-24     12
2015-04-25     12

我真的很难过

我想要这张桌子

StartDate      EndDate      TotalNo
2015-04-01     2015-04-08   10
2015-04-09     2015-04-12   12
2015-04-20     2015-04-25   12

表示日期范围中断或 TotalNo change 它应该创建一个新行。

我已经完成了,但它没有完全工作 我正在这样做

SELECT MIN(fldDate) AS StartDate,
       MAX(fldDate) AS EndDate,
       TotalNo
FROM dbo.tbl1
GROUP BY TotalNo
ORDER BY fldDate

它会像这样创建

StartDate      EndDate      TotalNo
2015-04-01     2015-04-08   10
2015-04-09     2015-04-25   12

【问题讨论】:

标签: sql sql-server group-by date-range


【解决方案1】:

您可以通过从fldDate 中减去一个整数序列来识别组——例如row_number() 提供的。减法后连续的日期将具有相同的值。剩下的就是group by

select min(fldDate) as StartDate, max(fldDate) as EndDate, TotalNo
from (select t.*,
             dateadd(day,
                     - row_number() over (partition by TotalNo order by fldDate),
                     fldDate) as grp
      from table t
     ) t
group by TotalNo, grp
order by StartDate, TotalNo;

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 2013-11-04
    • 2021-11-16
    • 2013-05-19
    • 2010-10-31
    • 2016-09-22
    • 2019-02-19
    相关资源
    最近更新 更多