我需要计算连续的工作日,并确定有 14 个或更多的成员。我的数据集将与此类似:
会员 | 日期 | 星期几 | 连续几天(需要创建) |
---|---|---|---|
会员1 | 2/10/23 | 星期五 | 1 |
会员1 | 2/13/23 | 星期一 | 2 |
会员1 | 2/14/23 | 星期二 | 3 |
会员1 | 2/17/23 | 星期五 | 1 |
会员2 | 2/2/23 | 星期四 | 1 |
会员2 | 2/3/23 | 星期五 | 2 |
我希望成员 1 的前 3 行计入连续天数而不是第 4 天,因为它不是连续的工作日(不担心假期)。
我开始只是用下面的代码找到连续的日子,我想我可以通过删除它们来调整它以考虑周末,但我想不出一个好的解决方案。
WITH pre AS
(
SELECT
member, date,
DATE_ADD(date, - ROW_NUMBER() OVER (ORDER BY member, date)) DateGroup
FROM
dataset1
GROUP BY
member, date
),
pre2 as
(
SELECT
MIN(u.date) startdt,
MAX(u.date) enddt,
a.DateGroup,
DATEDIFF(MAX(u.date), MIN(u.date)) + 1 Consecutive_days,
u.date, u.member
FROM
pre a
JOIN
dataset1 u ON u.date = a.date AND u.member = a.member
GROUP BY
DateGroup, u.member
ORDER BY
startdt
)
SELECT
startdt, enddt, Consecutive_days, member
FROM
PRE2
WHERE
Consecutive_days >= 14;