Postgres复杂的SQL查询

时间:2017-05-23 00:49:28

标签: sql json postgresql

我正在尝试通过Postgres创建一个查询。我有一张这样的桌子:

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响应中填充Google图表,图表接受空值但不接受“否”值。

我感谢任何帮助。

1 个答案:

答案 0 :(得分: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