为范围内的每个日期创建一行,并为 SQL 中的记录的日期范围内的每一天添加 1

noc*_*374 1 sql t-sql sql-server common-table-expression

假设我有一个日期范围 @StartDate = 2022-01-01 和 @EndDate = 2022-02-01,这是一个报告期。

此外,我还有客户记录,其中每个客户都有一个 LIVE Date 和一个 ServiceEndDate (或 ServiceEndDate = NULL,因为他们是持续客户)

某些客户的实时日期和服务结束日期范围可能超出报告期间范围。我只想报告几天他们是该期间的客户。

姓名 实时约会 服务结束日期
汤姆 2021-10-11 2022-01-13
标记 2022-11-13 2022-02-15
安迪 2022-01-02 2022-02-10
2022-01-09 2022-01-14

我想创建一个表,其中 A 列是日期(在报告期间的每个日期之间迭代),B 列是该日期的客户数量总和。

像这样的东西

日期 客户数量
2022-01-01 2
2022-01-02 3
2022-01-03 3
2022-01-04 3
2022-01-05 3
2022-01-06 3
2022-01-07 3
2022-01-08 3
2022-01-09 4
2022-01-10 4
2022-01-11 4
2022-01-12 4
2022-01-13 4
2022-01-14 3
2022-01-15 3

依此类推,直到@EndDate结束

任何帮助将不胜感激,谢谢。

Zak*_*ria 5

您可以将表连接到包含您需要的所有日期的日历表:

WITH calendar
     AS (SELECT Cast('2022-01-01' AS DATETIME) AS d
         UNION ALL
         SELECT Dateadd(day, 1, d)
         FROM   calendar
         WHERE  d < '2022-02-01')
SELECT d        AS "Date",
       Count(*) AS NumberOfCustomers
FROM   calendar
       INNER JOIN table_name
               ON d BETWEEN livedate AND COALESCE(serviceenddate, '9999-12-31')
GROUP  BY d;
Run Code Online (Sandbox Code Playgroud)

小提琴