每天在SQL中获取汇总结果

时间:2020-08-27 10:46:31

标签: sql postgresql

我需要处理一个非常复杂的SQL问题: 输入数据如下:

device_id | install_time

并且我需要进行日常安装和重新安装(这意味着该设备在今天之前已经有了install_time),如何快速生成此表结果?

以下是示例结果:

id1 | 08/24/2020
id1 | 08/23/2020
id1 | 08/22/2020
id2 | 08/22/2020
id3 | 08/23/2020
id3 | 08/22/2020

结果应该是

date | install | re_install
08/22/2020 | 3 | 0
08/23/2020 | 2 | 2
08/24/2020 | 1 | 1

1 个答案:

答案 0 :(得分:1)

如果我理解正确,则可以使用窗口函数和聚合:

select install_time::date,
       count(*) as num_installs,
       count(*) filter (where seqnum > 1) as num_reinstalls
from (select t.*,
             row_number() over (partition by device_id order by install_time) as seqnum
      from t
     ) t
group by install_time::date