我需要处理一个非常复杂的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
答案 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