繁体   English   中英

SQLite - 查找连续天数

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

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