有效地根据最短日期匹配两个表

时间:2014-11-18 21:00:36

标签: sql postgresql select

我有两个表,一个包含季度数据,另一个包含每日数据。我想加入这两个表格,以便在每日数据中每天选择并每天返回该季度的季度数据。我正在使用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做到这一点。任何人都可以提出更有效的解决方案吗?

1 个答案:

答案 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;