我有以下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'
Run Code Online (Sandbox Code Playgroud)
我有什么想法可以做到这一点?
Gor*_*off 22
如果您想要最近的日期,请这样做:
SELECT year, session_date
FROM calendar_dates
WHERE session_date < '$date_string'
ORDER BY session_date DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
使用类似逻辑后的最近日期.
对于最近的两边:
SELECT year, session_date
FROM calendar_dates
ORDER BY abs(session_date - date '$date_string')
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
在遥远的未来一段时间......用knn/btree
归档时间: |
|
查看次数: |
8386 次 |
最近记录: |