解释这个 SELECT WHERE 子查询是如何工作的?

Explain how this SELECT WHERE subquery works?

查询如下:

SELECT ID, Name, EventTime, State
FROM mytable as mm Where EventTime IN
(Select MAX(EventTime) from mytable mt where mt.id=mm.id)

这是 fiddle: http://sqlfiddle.com/#!3/9630c0/5 来源于此S.O。题: Select distinct rows whilst grouping by max value

我想用通俗易懂的英语听听它是如何工作的。我缺少对其中一部分的一些基本理解。

我真的不明白 mt.id=mm.id 部分中别名的作用。它选择 id 等于 id?

的行

mt.id=mm.id 部分使其成为 correlated subquery,因此子查询会针对每个 ID 重新计算。

查询然后为每个 ID 选择最近的事件。

基本翻译成"Get me the data for each id with maximum EventTime associated with."

您也可以将代码重写为

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