sql - 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 个小时,有什么方法可以更有效地完成它?
解决方案
尝试子查询:
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)
。
这节省了对大量数据的排序——这应该会提高性能。
推荐阅读
- vagrant - 使用 packer virtualbox vagrant 模板安装 puppet5 代理
- postgresql - 按条件聚合列
- php - “json”响应的类型在 PHP 中是布尔值
- ruby-on-rails - 从控制器操作运行 rails 迁移文件
- docker - 如何在 docker run 命令中挂载容器的目录
- unity3d - unity tile 调色板空 2018.1.0f2
- javascript - reactjs中的类型为数字时如何验证-和+登录输入框?
- flutter - 堆栈按预期工作 | z-index (CSS) 等效
- java - Java8 Null 安全比较
- reactjs - Reactjs 从动作重定向