我有在某个时间点存储值的一个表:SQL:选择一个记录每天最接近的具体时间
CREATE TABLE values
(
value DECIMAL,
datetime DATETIME
)
有可能是在每一天多的值,也可能是唯一的给定日期的一个值。现在,我想要在给定的时间范围(例如一个月)内获取每天的价值,这个时间距离一天的特定时间最近。如果当天有记录,我只想每天获得一个值,如果没有记录,我只想得到一个值。我的数据库是PostgreSQL。我很困惑。我可以在时间范围内获取所有值,并以编程方式为每一天选择最接近的值,但这意味着从数据库中提取大量数据,因为一天可能会有很多值。
(更新)
制订有点更抽象的:我有(可能是一分钟也过了两小时或2天)的任意精度的数据,我想将其转换为一个固定的精度有一天,一天的特定时间。
(第二次更新)
这是从正确的PostgreSQL类型converstions接受的答案查询,假设所需的时间是16:00:
SELECT datetime, value FROM values, (
SELECT DATE(datetime) AS date, MIN(ABS(EXTRACT(EPOCH FROM TIME '16:00' - CAST(datetime AS TIME)))) AS timediff
FROM values
GROUP BY DATE(datetime)
) AS besttimes
WHERE
CAST(values.datetime AS TIME) BETWEEN TIME '16:00' - CAST(besttimes.timediff::text || ' seconds' AS INTERVAL)
AND TIME '16:00' + CAST(besttimes.timediff::text || ' seconds' AS INTERVAL)
AND DATE(values.datetime) = besttimes.date
看起来不错!我目前正在试图找到正确的函数来获取日期时间(看起来不是TIME())。当我得到结果时,我会再次写信。 – 2010-09-21 13:18:43
没关系,发现它(当然在SO上):CAST(datetime AS TIME)http://stackoverflow.com/questions/3724519/is-there-a-better-way-to-extract-the-time-of-天 – 2010-09-21 13:25:48
哇,这工作得很好!谢谢!一些转换是必要的。我在原帖中发布工作版本。 – 2010-09-21 14:05:51