我有一张桌子,我需要从这个规则中选择一切:
id = 4524522000143 and validPoint = true
and date > (max(date)- interval '12 month')
-- the max date, is the max date for this id
解释规则:我必须获取所有寄存器并计算它们,它们必须至少距离最新寄存器1年。
这是我的实际查询:
WITH points as (
select 1 as ct from base_faturamento_mensal
where id = 4524522000143 and validPoint = true
group by id,date
having date > (max(date)- interval '12 month')
) select sum(ct) from points
有更有效的方法吗?
答案 0 :(得分:2)
你的查询正在使用诀窍,在HAVING
子句中包含一个非聚合列,但我发现它并不特别糟糕。看起来很好,但如果没有EXPLAIN ANALYZE <query>
输出,我就不能多说了。
要做的一件事是你可以摆脱CTE并在同一个查询中使用count(*)
而不是返回1
,然后在其上运行sum
。
select count(*) as ct
from base_faturamento_mensal
where id = 4524522000143
and validPoint = true
group by id, date
having date > max(date) - interval '12 months'