我有一个包含字段的表:
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。
答案 0 :(得分:0)
这很棘手。对于每个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;