SQL 分组和某个日期范围内未清项目的运行总计

标签 sql sql-server tsql stored-procedures

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

相关文章:

sql - 查询从 SQL Server 中的表中检索前两行

sql-server - SQL Server MERGE 慢

sql - MS SQL : Auto-increased key conflict

sql-server - 连接来自不同数据库的 2 个表的最佳方法是什么?

php - 按欧洲日期订购

sql - 如何确定 COALESCE 运算符成功选择了哪一列/值?

sql-server - 需要一些 DateDiff 计算从星期一开始的一周

mysql - 如何直接从 phpmyadmin 列更新 X

mysql - SQL查询: Replace blank space before SECOND quote?

mysql - MySQL 中何时使用单引号、双引号和反引号