SQL查询一组独特的值

时间:2012-09-27 18:54:37

标签: sql sqlite

我有一个包含列ID,时间和文本的数据库表。 ID不是唯一的。我正在尝试构建一个查询,上面写着“对于每个不同的ID,给我一个时间是T之前最大值的行”。第二部分很容易使用ORDER BY DESC LIMIT 1时间< T,但我不知道如何确保我覆盖所有ID。

举个例子:

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然后搜索每个ID来进行多次查询,但我希望有更高效的复合查询表单。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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