我有两个表,一个包含季度数据,另一个包含每日数据。我想加入这两个表格,以便在每日数据中每天选择并每天返回该季度的季度数据。我正在使用Postgres 9.3。
当前查询如下:
select
a.ID,
a.datadate,
b.*,
case when a.datadate = b.rdq then 1 else 0 end as VALID
from proj_data a, proj_rat b
where a.id = b.id
and b.rdq = (select min(rdq)
from proj_rat c
where a.id = c.id and a.datadate >= c.rdq);
但它的速度极慢,我需要为数千个ID做到这一点。任何人都可以提出更有效的解决方案吗?
答案 0 :(得分:0)
这消除了where
子句
select
ID,
a.datadate,
b.*,
(a.datadate = b.rdq)::integer as VALID
from
proj_data a
inner join
(
select distinct on (id, rdq) *
from project_rat
order by id, rdq
) b using(id)
where a.datadate >= b.rdq;