繁体   English   中英

统计 SQL 中的连续天数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM