【发布时间】:2021-10-28 14:34:02
【问题描述】:
假设我有一张桌子Orders,每个订单都有一个CreatedDate 和一个DeliveredDate 列。
如何为范围内的每个日期选择一个计数,该计数包括日期在CreatedDate 和DeliveredDate 之间的所有记录?假设获取 2021-10-04 到 2021-10-09 范围内的结果
如果Orders 表如下所示
ID CreatedOn DeliveredOn
1 2021-10-04 2021-10-04
2 2021-10-06 2021-10-07
3 2021-10-06 2021-10-08
4 2021-10-07 2021-10-08
5 2021-10-08 2021-10-09
结果应该是这样的
Date ActiveCount
2021-10-04 1
2021-10-05 0
2021-10-06 2
2021-10-07 3
2021-10-08 3
2021-10-09 1
因此命令 1 仅适用于 2021-10-04 的计数,但命令 3 适用于 2021-10-06、2021-10-07 和 2021-10-08 的计数,因为那是当天已送达。
我对 SQL 不是很好,而且我在思考如何做到这一点时遇到了麻烦。如果有人能指出我正确的方向,我将不胜感激!
【问题讨论】:
-
结果中的日期范围来自哪里?您有日期表,还是从用户输入或存储过程参数中获取它?在您要加入的另一个表中定义?在查询中硬编码?
-
@squillman 这是一个存储过程,日期范围将来自参数。现在我有一个加入日期表的过程,以确保我得到没有任何相关记录的日期的计数。我现在按一个日期分组的过程,以便每条记录都计入该范围内的一天。根据表中的两个日期,我需要每条记录可能超过一天。
标签: sql sql-server