我正在尝试查询表以获取一些结果,但是这样做的方式却给我错误:错误:无法嵌套聚合函数调用。
该表如下所示:
ID | canal_c1 | tarifacao |日期| ativo_id
我正在尝试的查询是这样:
SELECT
SUM(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end) as ConsForaPonta,
MAX(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end) as DemForaPonta,
ativo_id as ativo_id,
data_leitura_inicio::date as date
FROM
medicao
WHERE
medicao.ativo_id in (45) AND
medicao.tipo_leitura = 'Consumo' AND
medicao.data_leitura_inicio >= '2017-01-01' AND
medicao.data_leitura_inicio < '2017-01-10'
GROUP BY
medicao.ativo_id,
medicao.data_leitura_inicio::date
这给了我这样的结果: query result 很好,我现在需要的是DemForaPonta字段中的日期时间,为了做到这一点,我尝试了一下,但遇到了这个错误。
MAX(case when tarifacao = 'ForaPonta' and
canal_c1 = MAX(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end)
then data_leitura_inicio end) as DateDemForaPonta
您知道我该如何实现吗? 谢谢。
编辑: 这是一个示例,查询结果是预期结果。 example
答案 0 :(得分:0)
举一个带有真实数据的例子会很有帮助。但是无论如何,您可以使用嵌套选择以及其他选项来完成所需的工作。
嵌套的选择
SELECT *,
MAX(case when tarifacao = 'ForaPonta' and canal_c1 = DemForaPonta then data_leitura_inicio END)
AS DateDemForaPonta
FROM(
SELECT
SUM(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end) as ConsForaPonta,
MAX(case when tarifacao = 'ForaPonta' then canal_c1 else 0 end) as DemForaPonta,
ativo_id as ativo_id,
data_leitura_inicio::date as date
FROM
medicao
WHERE
medicao.ativo_id in (45) AND
medicao.tipo_leitura = 'Consumo' AND
medicao.data_leitura_inicio >= '2017-01-01' AND
medicao.data_leitura_inicio < '2017-01-10'
GROUP BY
medicao.ativo_id,
medicao.data_leitura_inicio::date
)data
由于我没有数据可以对其进行测试,因此并不真正知道它是否可以解决问题,但应该可以。