首页 > 解决方案 > Postgres SQL 在最近不到季度结束时加入

问题描述

我有表 1

ID | public_date
1  | 1992-06-03
2  | 2000-12-15

表 2 是一个范围内的一系列季度结束日期

Date
1995-12-31
1996-03-31
..
..
2000-12-31

我希望结果表为

ID | date        | public_date
1  | 1995-12-31  | 1992-06-03
1  | 1996-03-31  | 1992-06-03
1  | 1996-06-30  | 1992-06-03
      ...
      ...
1  | 2000-12-31  | 2000-12-15

基本上,将公开日期分配给最近的季度结束日期。目前,我有这个查询

SELECT DISTINCT ON (x."date")
       x."date", r.public_date
FROM   quarter_end_series as x
LEFT   JOIN public_time r ON r.public_date <= x."date" 
where x.date >= '1995-12-31 00:00:00'
ORDER  BY x."date", r.outlookdate desc;

但是这个查询花了 4 个小时,有什么方法可以更有效地完成它?

标签: sqlpostgresql

解决方案


尝试子查询:

select pt.*,
       (select qes.date
        from quarter_end_series qes
        where qes.date <= pt.date
        order by qes.date desc
       ) as quarter_end_date
from public_time pt;

在 上包含一个索引quarter_end_series(date)

这节省了对大量数据的排序——这应该会提高性能。


推荐阅读