2017-05-23 217 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