使用标准 SQL 的最长连续
Posted
技术标签:
【中文标题】使用标准 SQL 的最长连续【英文标题】:Longest streak using Standard SQL 【发布时间】:2018-06-08 04:06:08 【问题描述】:我有一个包含字段的表格:
user_id
tracking_date
有价值观
1, 2017-12-23
2, 2017-12-23
1, 2017-12-24
1, 2017-12-25
2, 2017-12-26
3, 2017-12-26
1, 2017-12-27
2, 2017-12-27
我想找出截至今天所有用户的最长连胜纪录。所以上述查询的o/p形式为:
1, 1
2, 2
3, 0
有没有办法在单个 SQL 查询中实现这个 o/p。
【问题讨论】:
你如何定义最长的连胜? 您可以结合使用 this blog post 来为用户找到最长的连续性和 this forum post 来将 LEAD 转换为 mysql 识别的东西 您的预期输出正确吗?我只能理解你的问题,如果输出是 id:1 with streak:3, id:2 with streak 2, id:3 with streak 1. 【参考方案1】:这很棘手。对于每个user_id
,您想获取上一个日期和最近日期没有记录的最新日期:
select user_id,
(case when max(tracking_date) <> current_date then 0
else (current_date -
max(case when prev_td is distinct from tracking_date - interval '1 day'
)
end) as seq
from (select t.*,
lag(tracking_date) over (partition by user_id order by tracking_date) as prev_td
from t
) t
group by user_id;
【讨论】:
我不是在获取日期,而是在寻找所有前几天的计数 @user2077935 。 . .这应该返回计数。以上是关于使用标准 SQL 的最长连续的主要内容,如果未能解决你的问题,请参考以下文章