如何计算连续的日期分组

时间:2016-02-04 17:23:28

标签: sql sql-server

我试图在表格中连续计算日期分组。我几乎使用下面的查询。但是当月份发生变化时会出现问题。这是查询:

LastDate    TotalDays
2016-02-19  1
2016-02-07  1
2016-02-03  3
2016-01-29  2
2016-01-24  1
2016-01-19  1

结果如下:

{{1}}

这个查询几乎可以正常工作,但正如你所看到的那样,在2016-02-03,它应该包括1月29日,28这将导致5而不是3。

有关如何解决此问题的任何想法?

以上代码的SQL小提琴示例:SQL Fiddle Sample

1 个答案:

答案 0 :(得分:2)

只要DateCreated是唯一的,您的查询就可以正常工作(请记住,1月29日之后不会是2月1日;)

如果DateCreated可以重复,您应该执行以下操作:

WITH CTE AS (
    SELECT 
        DateCreated, 
        StartDate = Dateadd(day,-ROW_NUMBER() OVER (ORDER BY DateCreated), DateCreated)
    FROM (SELECT DISTINCT DateCreated FROM @temp) t1
)
SELECT 
 [LastDate] = MAX(DateCreated),
    TotalDays = COUNT(1)
FROM CTE
GROUP BY StartDate
Order By StartDate desc

如果同一天有两个或更多个条目,那么这样可以确保您不会得到奇怪的结果。