Postgres窗口函数
请提供一些建议,以解决下面的问题与窗口函数,在postgres中。Postgres窗口函数
输入数据:
111; “2016年1月1日10点00分00秒”, “公园”
111; “2016年1月1日10时01分○○秒”, “指南”
111;“2016-01-01 10:02:00”;“guide”
111;“2016-01-01 10:03:00”;“operate”
111;“2016-01-01 10 :04:00“;”guide“
111;”2016-01-01 10:05:00“;”guide“
222;”2016-01-01 10:00:00“;”park“
222;“2016-01-01 10:01:00”;“guide”
222;“2016-01-01 10:02:00”;“guide”
222;“2016-01-01 10:03:00”;“operate”
222;“2016-01-01 10 :04:00 “” 引导 “
222; ”2016年1月1日10时05分○○秒“, ”引导“
输出所需:
111;” 2016年1月1日10:00:00“;”park“; 1
111;”2016-01-01 10:01:00“;”guide“; 2
111;”2016-01-01 10:02:00 “;”guide“; 2
111;“2016-01-01 10:03:00”;“operate”; 3
111;“2016-01-01 10:04:00”;“guide”; 4
111;“2016 -01-01 10:05:00“;”guide“; 4
222;”2016-01-01 10:00:00“;”park“; 1
222;”2016-01-01 10:01:00“;”guide“; 2
222;”2016-01-01 10:02:00“;”guide“; 2
222;”2016-01-01 10:03:00 “;”操作“; 3
222;”2016-01-01 10:04:00“;”guide“; 4
222;”2016-01-01 10:05:00“;”guide“ ; 4
输入数据代码:
create temp table input_tb(id int,date timestamp,category text);
insert into input_tb values(111,'2016-01-01:10:00:00','park');
insert into input_tb values(111,'2016-01-01:10:01:00','guide');
insert into input_tb values(111,'2016-01-01:10:02:00','guide');
insert into input_tb values(111,'2016-01-01:10:03:00','operate');
insert into input_tb values(111,'2016-01-01:10:04:00','guide');
insert into input_tb values(111,'2016-01-01:10:05:00','guide');
insert into input_tb values(222,'2016-01-01:10:00:00','park');
insert into input_tb values(222,'2016-01-01:10:01:00','guide');
insert into input_tb values(222,'2016-01-01:10:02:00','guide');
insert into input_tb values(222,'2016-01-01:10:03:00','operate');
insert into input_tb values(222,'2016-01-01:10:04:00','guide');
insert into input_tb values(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
THANK YOU Quassnoi! – suresh