我有一个包含列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来进行多次查询,但我希望有更高效的复合查询表单。
答案 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