使用标准SQL的最长条纹

问题描述 投票:0回答:1

我有一个字段表:

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。

sql postgresql standard-sql
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.