我有一个返回我想要的结果的查询,但由于子查询,它需要3次全表扫描。我尝试将其转换为窗口函数的尝试并没有奏效。想法?
SELECT a_day
,max(week_count)
,max(month_count)
FROM (
SELECT DISTINCT date_trunc('day', created_at) AS a_day
,(
SELECT count(*)
FROM accounts AS wk
WHERE wk.created_at BETWEEN (a.created_at - INTERVAL '7 days')
AND a.created_at
) AS week_count
,(
SELECT count(*)
FROM accounts AS wk
WHERE wk.created_at BETWEEN (a.created_at - INTERVAL '30 days')
AND a.created_at
) AS month_count
FROM accounts a
ORDER BY a_day
) AS sub_1
GROUP BY a_day
ORDER BY a_day
答案 0 :(得分:0)
with sub_1 as
(select date_trunc('day', created_at) AS a_day, count(*) as week_count
from accounts
where created_at BETWEEN (created_at - INTERVAL '7 days') and created_at
group by date_trunc('day', created_at))
,sub_2 as
(select date_trunc('day', created_at) AS a_day, count(*) as month_count
from accounts
where created_at BETWEEN (created_at - INTERVAL '30 days') and created_at
group by date_trunc('day', created_at))
select sub_1.a_day, max(sub_1.week_count), max(sub_2.month_count)
from sub_1 join sub_2 on sub_1.a_day = sub_2.a_day
group by sub_1.a_day
尝试使用Common表表达式,看看是否可以获得性能提升。这会扫描表格2次而不是3次。