【发布时间】:2016-08-21 17:50:06
【问题描述】:
我正在尝试使用 SQL 获取最新结果。我搜索了该网站,并从“stackoverflow”中找到了这篇旧帖子,链接:
SQL query to get most recent row for each instance of a given key
我在这里复制了最被接受的答案。
Select u.[username]
,u.[ip]
,q.[time_stamp]
From [users] As u
Inner Join (
Select [username]
,max(time_stamp) as [time_stamp]
From [users]
Group By [username]) As [q]
On u.username = q.username
And u.time_stamp = q.time_stamp
我不明白的是为什么我们不能简单地在下面使用(即:为什么在这种情况下需要“内连接”操作)?
Select username, ip, max(time_stamp) as time_stamp
From users
Group By username
【问题讨论】:
-
(1) 用您正在使用的数据库标记您的问题。 (2) 它不起作用。在几乎所有数据库中,它都会返回语法错误,因为
ip不包含在GROUP BY中,因此 SQL 引擎不知道要选择哪个值(MySQL 接受语法但插入不确定行中的值) . -
一般 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数。