以下简要介绍了我试图通过MySQL查询彻底解决的问题。这不是我正在处理的实际表格。
如果我有下表:
Name Buyer ID
John Fred 4
John Smith 3
Fred Sally 2
John Kelly 1
我想要一个查询来返回以下内容:
Name Buyer ID
John Fred 4
Fred Sally 2
这样我们就可以按名称'分组。并显示最新的行/买家/ ID。
我尝试通过执行嵌套的select语句来实现这一点,其中我首先执行了#34; ORDER BY ID DESC"然后,在最外面的SELECT," GROUP BY NAME"。而且,虽然这是解决问题的迂回方式,但似乎通过排序,正确的选择将返回给我。不幸的是," GROUP BY"不保证'那个'买方'列将包含预期的条目。
任何有用的建议将此实现为查询?目前,我有一个效率极低的PHP版本'在大型表转储上运行的查询 - 绝对不是最佳选择。
答案 0 :(得分:3)
尝试这个,子查询背后的想法是它使用ID
(聚合函数)获取每个Name
的最新MAX
。然后在子查询的两列上将它连接到表本身。
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT name, MAX(ID) maxID
FROM tableName
GROUP BY name
) b ON a.Name = b.Name AND
a.ID = b.MaxID
答案 1 :(得分:1)
另一种方法是加载在子查询中排序的数据,然后对结果进行分组。我不能引用这一点,但我已经在一些地方读到了没有(可辨别的)性能。
类似于:
SELECT *
FROM (
SELECT *
FROM `yourtable`
ORDER BY `id` DESC
) as `tmp`
GROUP BY `name`