我有一个项目表,为简单起见,其中包含列表的 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/