[英]Count consecutive days in SQL
我有一个数据集,其中包含参加健身房的人的姓名以及他们实际去健身房的日期。 我要数一数他们连续进健身房的天数。 数据集如下所示。
姓名 | 日期 |
---|---|
盟国 | 2021 年 1 月 1 日 |
盟国 | 2021 年 1 月 2 日 |
盟国 | 2021 年 1 月 3 日 |
盟国 | 2021 年 1 月 5 日 |
盟国 | 2021 年 1 月 7 日 |
布赖恩 | 2021 年 1 月 12 日 |
布赖恩 | 2021 年 1 月 13 日 |
布赖恩 | 2021 年 1 月 16 日 |
布赖恩 | 2021 年 1 月 21 日 |
布赖恩 | 2021 年 1 月 22 日 |
在这里,我们知道 Ally 连续 3 天去健身房(1/1/2021-1/3/2021),Brian 去了 4 天(1/12/2021-1/13/2021 和 1/21/2021-1/ 22/2021)。 我希望最终结果看起来像这样。
姓名 | 数数 |
---|---|
盟国 | 3 |
盟国 | 1 |
盟国 | 1 |
布赖恩 | 2 |
布赖恩 | 1 |
布赖恩 | 2 |
有没有办法在 SQL 中做到这一点?
当日期递增 1 时,您可以从日期中减去递增值以获得常量。 rest 只是聚合。
因为您没有明确指定数据库,所以我将使用标准 SQL 语法:
select name, count(*), min(date), max(date)
from (select t.*,
row_number() over (partition by name order by date) as seqnum
from t
) t
group by name, date - seqnum * interval '1 day'
order by name, min(date);
这应该在 Postgres(接近标准 SQL)中工作。 在 SQL 服务器中,它将是:
group by name, dateadd(day, -seqnum, date)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.