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