【发布时间】:2021-02-03 07:52:58
【问题描述】:
我正在尝试计算一个人可能拥有的连续天数,唯一的问题是我有日期范围,而不是日期的直接列表。这是我所说的范围的示例:
Name Start_Date End_Date
Johnny 2020-01-02 2020-01-04
Johnny 2020-01-05 2020-01-05
Johnny 2020-01-06 2020-01-10
Jenny 2020-02-07 2020-02-07
Jenny 2020-02-10 2020-02-11
Jenny 2020-02-12 2020-02-12
开始日期和结束日期是一个包含 2 列的范围。
我想要达到的结果是这样的:
Johnny has 9 consecutive days
Jenny has 3 consecutive days
我遇到了一些解决方案示例,但我找不到适合我的日期范围问题的示例。
目前使用的代码示例:
WITH
dates(date, employee_number) AS (
SELECT DISTINCT CAST(start_date AS DATE), name
FROM myTABLE
WHERE name = "Jenny"
),
groups AS (
SELECT
ROW_NUMBER() OVER (ORDER BY date) AS rn, name,
dateadd(day, -ROW_NUMBER() OVER (ORDER BY date), date) AS grp,
date
FROM dates
)
SELECT
name,
COUNT(*) AS consecutiveDates,
MIN(date) AS minDate,
MAX(date) AS maxDate
FROM groups
GROUP BY grp, name
【问题讨论】:
-
您使用的是哪个数据库?
MySQL或sql-server,指定一个。 -
嗨,我正在使用 sql-server
-
你能给我们举个例子来说明你迄今为止的尝试吗?
-
@holder 我用我一直在使用的代码示例编辑了我的问题
标签: sql sql-server datetime count gaps-and-islands