SQLite-查找连续天数

SQLite-查找连续天数,sql,sqlite,Sql,Sqlite,我正在尝试获取当前连续挑战天数,称为当前连胜。此外,我还想找出最长连胜天数。我使用“yyyy/MM/dd”格式将日期保存在数据库中 如果我只是在搜索所有日期和相关的challengeid,我有以下代码: SELECT CHALLENGEID, DATE FROM ACTIVE_CHALLENGES_TABLE ORDER BY CHALLENGEID, DATE 结果是: | CHALLENGEID | DATE | |----------------------------

我正在尝试获取当前连续挑战天数,称为当前连胜。此外,我还想找出最长连胜天数。我使用“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;

帮我们一个忙,运行
选择CHALLENGEID,按CHALLENGEID的顺序从活动的\u CHALLENGES\u表中选择日期,然后将结果粘贴为文本,而不是屏幕截图。。或者,运行
选择“插入x值(“| | | | | | | | |,”“| | | |,”);”从活动的\u挑战\u表中
生成一些我们可以用来制作样本数据的东西…重复相同的日期是否会中断条纹?如果没有,它在连胜中算为+1吗?(长:12,13,14 vs 15,16,16)让您更容易获得帮助,向我们展示一些示例表数据和预期结果-全部为格式化文本(无图像)。好的,我现在添加了部分查询结果。抱歉,屏幕的状态较旧:challengeid不能有两次相同的日期