2012-09-27 48 views
0

我有一個帶有列ID,時間和文本的數據庫表。 ID是非唯一的。我試圖構造一個查詢,說「對於每個不同的ID,給我的時間是T之前的最大值的行」。第二部分很簡單,在ORDER BY DESC LIMIT 1 WHERE time < T,但我不知道如何確保我獲得所有ID的覆蓋範圍。針對一組特殊值的SQL查詢

舉個例子:

ID,time,text 
1,10,"hello" 
1,20,"world" 
2,10,"foo" 
3,10,"bar" 
4,50,"blah" 

如果我搜索與時間25,我會想:

1,20,"world" 
2,10,"foo" 
3,10,"bar" 

我能做到這一點通過搜索DISTINCT ID,然後做一個爲多個查詢搜索每個,但我希望有一個更有效的複合查詢形式。

回答

0
SELECT t.ID, t.time, t.text 
    FROM YourTable t 
     INNER JOIN (SELECT ID, MAX(time) AS MaxTime 
         FROM YourTable 
         WHERE time < T 
         GROUP BY ID) q 
      ON t.ID = q.ID 
       AND t.time = q.MaxTime 
0

您可以使用子查詢:

select t1.id, t1.time, t1.test 
from yourtable t1 
inner join 
(
    select id, max(time) MaxTime 
    from yourtable 
    where time < T 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.time = t2.time