gpt4 book ai didi

postgresql - Postgres 窗口函数

转载 作者:行者123 更新时间:2023-11-29 13:53:19 25 4
gpt4 key购买 nike

请提供一些建议来解决以下在 postgres 中使用窗口函数的问题。

输入数据:
111;"2016-01-01 10:00:00";"公园"
111;"2016-01-01 10:01:00";"指南"
111;"2016-01-01 10:02:00";"指南"
111;"2016-01-01 10:03:00";"运行"
111;"2016-01-01 10:04:00";"指南"
111;"2016-01-01 10:05:00";"指南"
222;"2016-01-01 10:00:00";"公园"
222;"2016-01-01 10:01:00";"指南"
222;"2016-01-01 10:02:00";"指南"
222;"2016-01-01 10:03:00";"运行"
222;"2016-01-01 10:04:00";"指南"
222;"2016-01-01 10:05:00";"指南"

需要的输出:

111;"2016-01-01 10:00:00";"公园";1
111;"2016-01-01 10:01:00";"指南";2
111;"2016-01-01 10:02:00";"指南";2

111;"2016-01-01 10:03:00";"运行";3
111;"2016-01-01 10:04:00";"指南";4
111;"2016-01-01 10:05:00";"指南";4

222;"2016-01-01 10:00:00";"公园";1
222;"2016-01-01 10:01:00";"指南";2
222;"2016-01-01 10:02:00";"指南";2

222;"2016-01-01 10:03:00";"运行";3
222;"2016-01-01 10:04:00";"指南";4
222;"2016-01-01 10:05:00";"指南";4

输入数据代码:
创建临时表 input_tb (id int, date timestamp, category text);
插入 input_tb 值 (111, '2016-01-01:10:00:00', 'park');
插入 input_tb 值 (111, '2016-01-01:10:01:00', 'guide');
插入 input_tb 值 (111, '2016-01-01:10:02:00', 'guide');
插入 input_tb 值 (111, '2016-01-01:10:03:00', 'operate');
插入 input_tb 值 (111, '2016-01-01:10:04:00', 'guide');
插入 input_tb 值 (111, '2016-01-01:10:05:00', 'guide');
插入 input_tb 值 (222, '2016-01-01:10:00:00', 'park');
插入 input_tb 值 (222, '2016-01-01:10:01:00', 'guide');
插入 input_tb 值 (222, '2016-01-01:10:02:00', 'guide');
insert into input_tb values (222, '2016-01-01:10:03:00', 'operate');
插入 input_tb 值 (222, '2016-01-01:10:04:00', 'guide');
插入 input_tb 值 (222, '2016-01-01:10:05:00', 'guide');

感谢您的帮助。

苏雷什

最佳答案

SELECT  id, date, category,
SUM(swap) OVER (PARTITION BY id ORDER BY date)
FROM (
SELECT *,
(LAG(category) OVER (PARTITION BY id ORDER BY date) IS DISTINCT FROM category)::INTEGER swap
FROM input_tb
) q

参见 fiddle

关于postgresql - Postgres 窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36901135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com