2013-08-02 128 views
1

內我有一個表一堆紀錄:SQL選擇記錄時間間隔

userID testID value time 
1   1001  2  2009-09-05 06:25:00 
1   1001  4  2009-09-05 07:25:00 
1   1001  2  2009-09-05 03:25:00 
1   1002  5  2009-09-05 06:25:00 
1   1002  6  2009-09-05 07:25:00 
1   1002  4  2009-09-05 03:25:00 

用戶輸入的時間x。我想在入口的第一個X小時內查詢每個測試的最新值。也就是說,如果他在3:25進入,我想在3小時內的最新值,我想回到

1   1001  2  2009-09-05 07:25:00 
1   1002  5  2009-09-05 07:25:00 

我不知道最好的方式去了解這一點,但這裏是我試過到目前爲止:

SELECT testID, value from table WHERE userID = 1 and 
    time <= timestamp 'enter_time' + INTERVAL '3 HOURS' as u INNER JOIN 
    (SELECT testID, max(time) as time from table WHERE time <= timestamp 
    'enter_time' + INTERVAL '3 HOURS' GROUP BY testID) as q 
    on u.itemid = q.itemid AND u.time = q.time 

我收到語法錯誤,但代碼似乎是正確的。有人能幫我一下嗎?

謝謝!

+0

你得到了什麼錯誤,以及RBDMS是什麼? MySQL的?甲骨文? –

+0

我在postgresql上。錯誤只是「AS上或附近的語法錯誤」,其中AS是ASU部分。 – xhassassin

回答

0

您需要將第一個查詢包裝在parens中。

(SELECT testID, value from table WHERE userID = 1 and 
    time <= timestamp 'enter_time' + INTERVAL '3 HOURS') as u INNER JOIN 
    (SELECT testID, max(time) as time from table WHERE time <= timestamp 
    'enter_time' + INTERVAL '3 HOURS' GROUP BY testID) as q 
    on u.itemid = q.itemid AND u.time = q.time