以下是查询:
SELECT ID, Name, EventTime, State
FROM mytable as mm Where EventTime IN
(Select MAX(EventTime) from mytable mt where mt.id=mm.id)
这是小提琴: http://sqlfiddle.com/#!3/9630c0/5 它来自这个S.O.题: Select distinct rows whilst grouping by max value
我想用简单的英语听听它是如何运作的。我错过了对其中一部分的基本理解。
我真的不明白别名在mt.id = mm.id部分做了什么。它选择id等于id的行<?p>
答案 0 :(得分:1)
mt.id=mm.id
部分使其成为correlated subquery,因此会针对每个ID重新评估子查询。
然后,查询为每个ID选择最近的事件。
答案 1 :(得分:1)
它基本上被翻译成“获取与每个id相关的最大EventTime的数据。”
您也可以将代码重写为
SELECT t1.ID, t1.Name, t1.EventTime, t1.State FROM mytable as t1
inner join
(
select id,max(EventTime) as EventTime from mytable group by id
) as t2 on t1.id=t2.id and t1.EventTime=t2.EventTime