我有一个项目表,为简单起见,其中包含 ItemID
、 StartDate
和 EndDate
项目列表。
ItemID StartDate EndDate
1 1/1/2011 1/15/2011
2 1/2/2011 1/14/2011
3 1/5/2011 1/17/2011
...
我的目标是能够将此表连接到具有日期顺序列表的表,
并说明在特定日期打开了多少项,以及累积打开了多少项。
Date ItemsOpened CumulativeItemsOpen
1/1/2011 1 1
1/2/2011 1 2
...
我可以看到这将如何通过
WHILE
循环完成,但这有性能影响。我想知道如何
这可以通过基于集合的方法来完成吗?
最佳答案
SELECT COUNT(CASE WHEN d.CheckDate = i.StartDate THEN 1 ELSE NULL END)
AS ItemsOpened
, COUNT(i.StartDate)
AS ItemsOpenedCumulative
FROM Dates AS d
LEFT JOIN Items AS i
ON d.CheckDate BETWEEN i.StartDate AND i.EndDate
GROUP BY d.CheckDate
关于SQL 分组和运行某个日期范围内未清项的总数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6673156/