按列依赖另一列进行分组

时间:2012-11-16 03:44:51

标签: php mysql sql

以下简要介绍了我试图通过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版本'在大型表转储上运行的查询 - 绝对不是最佳选择。

2 个答案:

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