2013-08-02 3 views
1

У меня есть таблица с кучей записей:SQL Select запись в интервале времени

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 

Пользователь вводит в момент х. Я хочу запросить самое последнее значение для каждого теста в течение первых Х часов входа. IE, если он входит в 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? Oracle? –

+0

Я на постгреск. Ошибка - это просто «Синтаксическая ошибка на AS или рядом», где AS является частью AS u. – 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 
Смежные вопросы