Sql 选择时间戳最接近但不晚于现在的行

Sql 选择时间戳最接近但不晚于现在的行,sql,postgresql,Sql,Postgresql,使用Postgres9.4,我试图从包含最接近但不早于当前系统时间的数据的表中选择一行。datetime列是一个不带时区的时间戳数据类型,数据与服务器位于同一时区。表格结构为: uid | datetime | date | day | time | predictionft | predictioncm | highlow -----+---------------------+------------+-----+----------+------

使用Postgres9.4,我试图从包含最接近但不早于当前系统时间的数据的表中选择一行。
datetime
列是一个不带时区的
时间戳
数据类型,数据与服务器位于同一时区。表格结构为:

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:澄清问题。

总体思路如下。您可以针对postgresql对其进行调整

select fields
from yourTable
where datetimeField = 
(select min(datetimeField)
from yourTable
where datetimeField > current_timestamp)

总体思路如下。您可以针对postgresql对其进行调整

select fields
from yourTable
where datetimeField = 
(select min(datetimeField)
from yourTable
where datetimeField > current_timestamp)

你也可以用这个。这会更快。但是如果你排的很少,那就没什么区别了

select * from table1
where datetime >= current_timestamp
order by datetime
limit 1

您也可以使用此功能。这会更快。但是如果你排的很少,那就没什么区别了

select * from table1
where datetime >= current_timestamp
order by datetime
limit 1

除了给出的答案之外,另一种方法是使用窗口函数
第一个值

select id, first_value(dt) over (order by dt)
  from test
 where dt >= current_timestamp
 limit 1

在这里查看它的工作情况:

除了给出的答案之外,另一种方法是使用窗口函数
first\u value

select id, first_value(dt) over (order by dt)
  from test
 where dt >= current_timestamp
 limit 1

看到它在这里工作了吗:

上下都离得最近吗?我的意思是,如果有一个列显示为
2015-12-31 13:59:00
,那么它将被选中?Jorge-否,在所有情况下,查询都应选择将来的行或与当前时间完全相等的行。您可以说
早于
不晚于问题中的行。但在此注释中,在
之后是
。请更正这个问题。上下两个都是最近的吗?我的意思是,如果有一个列显示为
2015-12-31 13:59:00
,那么它将被选中?Jorge-否,在所有情况下,查询都应选择将来的行或与当前时间完全相等的行。您可以说
早于
不晚于问题中的行。但在此注释中,在
之后是
。请纠正这个问题。