我无法获取以下
的记录 | DATEFROM | DATETO
| 2012-01-02 | 2012-01-03
| 2012-01-11 | 2012-01-16
| 2012-01-08 | 2012-01-22
| 2012-01-29 | 2012-01-30
| 2012-01-08 | 2012-01-11
我正在尝试从第一个范围的最后一个日期结束的第一个范围开始,计算包含每天日期的范围。
示例输出:
2012-01-02 | 1
2012-01-03 | 1
2012-01-08 | 2
2012-01-09 | 2
2012-01-10 | 2
2012-01-11 | 3
2012-01-12 | 2
2012-01-13 | 2
2012-01-14 | 2
2012-01-15 | 2
2012-01-16 | 2
......
我的数据库包含从2008年到现在的数据。
换句话说,我试图获取特定日期的记录数。
并非每天都在TABLE
每个月
我发现此帖Tricky mysql count occurrences of each day within date range但无法转换提供给我的SQL Server 2012的代码。
你可以试试这里 http://sqlfiddle.com/#!6/0855b/1
答案 0 :(得分:4)
好的,这是做你想做的事的一种方法:
DECLARE @MinDate DATE, @MaxDate DATE;
SELECT @MinDate = MIN(DATEFROM),
@MaxDate = MAX(DATETO)
FROM ENTRIES;
WITH Dates AS
(
SELECT DATEADD(DAY,number,@MinDate) [Date]
FROM master.dbo.spt_values
WHERE type = 'P'
AND number > 0
AND DATEADD(DAY,number,@MinDate) <= @MaxDate
)
SELECT A.[Date],
COUNT(*) N
FROM Dates A
LEFT JOIN Entries B
ON A.[Date] >= B.DATEFROM
AND A.[Date] <= B.DATETO
GROUP BY A.[Date]
ORDER BY A.[Date]
如果范围日期超过2047天,那么您需要创建的值多于master.dbo.spt_values
中可用的值(这是微不足道的,例如您可以使用CROSS JOIN
)