如果我这样做——
SELECT dv.Name
,MAX(hb.[DateEntered]) as DE
FROM
[Devices] as dv
INNER JOIN
[Heartbeats] as hb ON hb.DeviceID = dv.ID
WHERE DE < '2013-03-04'
GROUP BY dv.Name
Run Code Online (Sandbox Code Playgroud)
我收到这个错误——
消息 207,级别 16,状态 1,第 17 行 列名“DE”无效。
如果我这样做——
SELECT Name, DE FROM (
SELECT dv.Name
,MAX(hb.[DateEntered]) as DE
FROM
[Devices] as dv
INNER JOIN
[Heartbeats] as hb ON hb.DeviceID = dv.ID
GROUP BY dv.Name
) as tmp WHERE tmp.DE < '2013-03-04'
Run Code Online (Sandbox Code Playgroud)
它按预期工作。
有人可以解释为什么我需要将主查询嵌套为子查询来限制我的数据集吗?
另外,这里是否有更好的方法来实现目标?从一张表中检索所有记录,以及按[DateEntered]
降序排列的单个“顶部”相关记录?