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

时间:2015-08-12 08:24:05

标签: sql select subquery alias

以下是查询:

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>

2 个答案:

答案 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