2016-04-27 75 views
1

请提供一些建议,以解决下面的问题与窗口函数,在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');

感谢您的帮助。

苏雷什

回答

0
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

+0

THANK YOU Quassnoi! – suresh