我有一个项目表,为简单起见,其中包含 ItemIDStartDateEndDate 项目列表。

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/

10-13 03:44