使用Postgres 9.4,我试图从包含最接近但不在当前系统时间之前的数据的表中选择一行。 datetime
列是timestamp without time zone
数据类型,数据与服务器位于同一时区。表结构是:
uid | datetime | date | day | time | predictionft | predictioncm | highlow
-----+---------------------+------------+-----+----------+--------------+--------------+---------
1 | 2015-12-31 03:21:00 | 2015/12/31 | Thu | 03:21 AM | 5.3 | 162 | H
2 | 2015-12-31 09:24:00 | 2015/12/31 | Thu | 09:24 AM | 2.4 | 73 | L
3 | 2015-12-31 14:33:00 | 2015/12/31 | Thu | 02:33 PM | 4.4 | 134 | H
4 | 2015-12-31 21:04:00 | 2015/12/31 | Thu | 09:04 PM | 1.1 | 34 | L
查询速度不用担心,因为该表包含~1500行。
为清楚起见,如果当前服务器时间为2015-12-31 14:00:00
,则返回的行应为3
而不是2
。
编辑: 基于下面接受的答案,解决方案是:
select *
from myTable
where datetime =
(select min(datetime)
from myTable
where datetime > now());
编辑2:澄清问题。
答案 0 :(得分:3)
您也可以使用它。这会更快。但如果你的行数很少,它就不会有太大的不同。
select * from table1
where datetime >= current_timestamp
order by datetime
limit 1
的 SQLFiddle Demo
强>
答案 1 :(得分:2)
总体思路如下。您可以为postgresql调整它。
select fields
from yourTable
where datetimeField =
(select min(datetimeField)
from yourTable
where datetimeField > current_timestamp)
答案 2 :(得分:1)
除了给出答案之外的另一种方法是使用窗口函数first_value
select id, first_value(dt) over (order by dt)
from test
where dt >= current_timestamp
limit 1