2017-05-23 257 views
0

我試圖通過Postgres創建一個查詢。我有這樣一個表格:Postgres複雜的SQL查詢

Date----------|Meter-----|------period-----|-----value 
2017-05-23-----meter1 ---------- 1 ------------ 2.01 
2017-05-23-----meter1 ---------- 3 ------------ 4.01 
2017-05-23-----meter1 ---------- 4 ------------ 0.00 

該表格代表了儀表讀數。每天需要有48x米的讀數。但有時由於某種原因,抄表可能無法完成,因此不會有記錄。另外,儀表讀數可能爲0.00。

我需要做的是產生了一系列的給了我這樣的事情,如果我搜索抄表對於任何給定計在某一特定日期:

Period----Total 
1  --- 2.01 
2  --- null 
3  --- 4.01 
4  --- 0.00 
. 
. 
. 

它需要即使給我48點的讀數沒有記錄。我試圖從JSON響應中填充一個谷歌圖表,並且圖表接受空值,但不是「否」值。

我很感激任何幫助。

回答

2

您可以使用generate_series生成號碼列表和left join您的表,並顯示丟失的時間段爲null

select g.val,t.value 
from generate_series(1,48) g(val) 
left join tbl on t.period=g.val and t.date = '2017-05-23' --change this value as required 

如果你需要它所有的日期和米表,cross join生成的日期和米,left join到該表週期。

select dm.date,dm.meter,g.val,t.value 
from generate_series(1,48) g(val) 
cross join (select distinct date,meter from t) dm 
left join t on t.period=g.val and t.date=dm.date and t.meter=dm.meter 
where dm.date = date '2017-05-23' --change this value as required 
and dm.meter='meter1' --change this value as required 
+0

偉大的解決方案。我認爲't.meter ='meter1''也是第一個查詢中'left join'條件的一部分。 –

+0

謝謝你們,幫了大忙! :) – Daryn