You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中查找指定日期的精确匹配或前后最近记录

在PostgreSQL中查找日期匹配或紧邻的前后记录

数据表结构

我有一个名为prices的PostgreSQL数据表,结构及数据如下:

idcolumn_1column_2column_3date_col
11.51.71.61234560000
20.91.11.01234570000
311.523.517.51234580000
48.312.310.31234600000

需求

  • 若输入日期在date_col中存在,返回精确匹配的行(例如输入1234580000时返回对应id为3的行);
  • 若日期不存在,返回该日期前后紧邻的两条记录(例如输入1234590000时返回id为3和4的行)。

尝试过程

最初用Python判断结果后多次查询,效率较低。曾参考类似写法编写SQL,但该语句仅在日期存在时有效:

SELECT *
FROM prices, (SELECT id, next_val, last_val
             FROM (SELECT t.*,
                          LEAD(t.id, 1) OVER (ORDER BY t.date_col) as next_val,
                          LAG(t.id, 1) OVER (ORDER BY t.date_col)  as last_val
                   FROM prices AS t) AS s
             WHERE 1234580000 IN (s.date_col, s.next_val, s.last_val)) AS x
WHERE prices.id = x.id OR prices.id = x.next_val OR prices.id = x.last_val

最终可行SQL

SELECT * FROM (SELECT * FROM prices WHERE prices.date_col <= 1234580000 ORDER BY prices.date_col DESC LIMIT 1) AS a 
UNION 
(SELECT * FROM prices WHERE prices.date_col >= 1234580000 ORDER BY prices.date_col ASC LIMIT 1)

内容的提问来源于stack exchange,提问作者Jacob Dallas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:05:21