PostgreSQL返回查询日期的确切或最接近的日期

时间:2014-04-25 13:25:00

标签: sql postgresql

我有以下postgresql语法,返回值WHERE session_date匹配$ date_string

问题是有时$ date_string在表中不可用,所以我希望将最接近的日期返回到$ date_string

$date_string = '2014-04-25';

SELECT year, session_date FROM calendar_dates WHERE session_date='$date_string'

我有什么想法可以做到这一点吗?

2 个答案:

答案 0 :(得分:18)

如果你想要最近的日期,请这样做:

SELECT year, session_date
FROM calendar_dates
WHERE session_date < '$date_string'
ORDER BY session_date DESC
LIMIT 1;

使用类似逻辑后的最近日期。

对于最近的一方:

SELECT year, session_date
FROM calendar_dates
ORDER BY abs(session_date - date '$date_string') 
LIMIT 1;

答案 1 :(得分:7)

使用btree_gist和knn

使用此方法,您可以找到带索引的最近事件。

CREATE EXTENSION btree_gist;
CREATE TABLE foo ( id serial, ts timestamp );

INSERT INTO foo (ts)
VALUES
  ('2017-06-02 03:09'),
  ('2016-06-02 03:09'),
  ('1900-06-02 03:09'),
  ('1954-06-02 03:09');

CREATE INDEX ON foo USING gist(ts);

SELECT *
FROM foo
ORDER BY '1950-06-02 03:09' <-> ts
LIMIT 1;

第11页

在遥远的未来......与knn/btree

相处一段时间