[英]SQLite - Finding consecutive days
我正在尝试获取当前连续天数的当前连续天数,以应对称为“当前连胜”的挑战。 此外,我想找到被称为最长连续记录的最多连续天数。 我使用格式“yyyy/MM/dd”将日期保存在我的数据库中。
如果我只是搜索所有日期和相关的challengeid,我有以下代码:
SELECT CHALLENGEID, DATE FROM ACTIVE_CHALLENGES_TABLE ORDER BY CHALLENGEID, DATE
结果是:
| CHALLENGEID | DATE |
|-----------------------------|
| 1 | 14/10/2020 |
| 1 | 15/10/2020 |
| 1 | 16/10/2020 |
| 1 | 24/10/2020 |
| 1 | 27/10/2020 |
| 2 | 14/10/2020 |
| 2 | 15/10/2020 |
| 2 | 19/10/2020 |
| 3 | 13/10/2020 |
| 3 | 15/10/2020 |
| ... | ...
所以我有challengeid 和date 列。 你能帮我吗,因为我不知道如何获取当前连续(从当天向后)和最长连续记录之类的数据?
结果应如下所示:
| CHALLENGEID | MAX_STREAK | CURRENT_STREAK |
|----------------------------------------------|
| 1 | 3 | 1 | //assume today is 27/10/2020
| 2 | 2 | 0 |
| 3 | 1 | 0 |
|...
谢谢!
这是一种间隙和岛屿问题。 您可以生成一系列数字,并且该序列与日期之间的差异对于“连续”而言是恒定的。 剩下的只是聚合:
select challenge_id, max(length) as max_streak,
max(case when max(date) = date('now') then streak else 0 end) as current_streak
from (select challenge_id, min(date) as min_date, max(date) as max_date, count(*) as length
from (select t.*,
row_number() over (partition by challengeid order by date) as seqnum
from ACTIVE_CHALLENGES_TABLE t
) t
group by challengeid, date(date, '-' || seqnum || ' day')
) c
group by challenge_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.