2015-12-19 46 views
1

我想從記錄的事件表中轉換數據。我正在將數據轉換爲一致的「每日半小時視圖」。例如48個半週期(當沒有匹配的事件時用零填充半小時),我已經完成了這一部分成功。將sql桶值postgres生成時間序列

SELECT t1.generate_series, 
v1.begin_time, 
v1.end_time, 
v1.volume 
FROM tbl_my_values v1 
RIGHT JOIN (SELECT generate_series.generate_series 
     FROM generate_series((to_char(now(), 'YYYY-MM-dd'::text) || ' 22:00'::text)::timestamp without time zone, 
     (to_char(now() + '1 day'::interval, 'YYYY-MM-dd'::text) || ' 22:00'::text)::timestamp without time zone, '00:30:00'::interval) 
     generate_series(generate_series)) t1 ON t1.generate_series = v1.begin_time 
     order by 1 ; 

這提供了以下的結果:

2015-12-19 22:00:00 | 2015-12-19 22:00:00+00 | 2015-12-19 23:00:00+00 | 172.10 
2015-12-19 22:30:00 |      |      | 
2015-12-19 23:00:00 | 2015-12-19 23:00:00+00 | 2015-12-20 00:00:00+00 | 243.60 
2015-12-20 00:30:00 |      |      | 
2015-12-20 01:00:00 |      |      | 

但是基於該「開始」和「結束」列中的視圖應該是:

2015-12-19 22:00:00 | 2015-12-19 22:00:00+00 | 2015-12-19 23:00:00+00 | 172.10 
2015-12-19 22:30:00 |      |      | 172.10 
2015-12-19 23:00:00 | 2015-12-19 23:00:00+00 | 2015-12-20 00:00:00+00 | 243.60 
2015-12-20 00:30:00 |      |      | 243.60 
2015-12-20 01:00:00 |      |      | 

因爲在此所述的值例如跨度2半小時,例如有效期爲一小時。 所有幫助非常歡迎。謝謝

回答

1

您的ON條款只是比較begin_time。我想你想要一個不平等:

on t1.generate_series between v1.begin_time and t1.end_time 
+0

這很好,非常感謝您的幫助。 – user636322

+0

其實只是通過結果來處理之間的重複行,例如,創建2 * 23點以上的行,因爲它是我設定的開始和結束時間上的匹配。 – user636322

+0

因此,查詢正確分段值,但生成重複行。 – user636322