2016-04-27 10 views
1

ポストグルで、以下の問題をウィンドウ関数で解決するための提案をしてください。Postgresウィンドウ関数

入力データ:
111、 "2016年1月1日午前10時00分00秒"、 "公園"
111、 "2016年1月1日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 ";" park "
222;「2016-01-01 10:01:00」;「ガイド」
「操作」「
222」「2016-01-01 10:03:00」; :04:00 ";" ガイド "
222、 "2016年1月1日午前10時05分00秒"、 "ガイド" 必須

出力:

111;" 2016年1月1日「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:04:00」;「ガイド」; 4
111;「2016-01-01 10:03:00」;「2016-01-01 10:03:00」;「2016-01-01 10:03:00」; 「0116 10:05:00」;「ガイド」; 4

222;「2016-01-01 10:00:00」;「パーク」; 1
222;「2016-01-01 10:01:00:00,30:00,30:00,21:00,21:00,21:00,21:00,21:00,19: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'、 '操作');
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');
input_tb値に挿入する(222、 '2016-01-01:10:03:00'、 '操作');
input_tb値に挿入する(222、 '2016-01-01:10:04:00'、 'guide');
input_tb値に挿入する(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

はあなたにQuassnoiをありがとうございました!を参照してください。 – suresh

関連する問題