0

我有一个包含 ID、时间和文本列的数据库表。ID 不唯一。我正在尝试构建一个查询,上面写着“对于每个不同的 ID,给我时间是 T 之前的最大值的行”。第二部分很容易使用 ORDER BY DESC LIMIT 1 WHERE time < 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 进行搜索来执行多个查询,但我希望有一个更有效的复合查询表单。

4

2 回答 2

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
于 2012-09-27T18:57:44.097 回答
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
于 2012-09-27T18:58:31.723 回答