我有在某個時間點存儲值的一個表: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