我试图在表格中连续计算日期分组。我几乎使用下面的查询。但是当月份发生变化时会出现问题。这是查询:
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
答案 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
如果同一天有两个或更多个条目,那么这样可以确保您不会得到奇怪的结果。