2

我有下表

+----+----------+-----+
| id | priority | sub |
+----+----------+-----+
| 1  |    1     |  A  |
| 2  |    3     |  A  |
| 3  |    4     |  A  |
| 4  |    2     |  B  |
| 5  |    9     |  B  |
+----+----------+-----+

我正在尝试为每个子获取具有最高优先级的行。所以这个结果:

+----+----------+-----+
| id | priority | sub |
+----+----------+-----+
| 3  |    4     |  A  |
| 5  |    9     |  B  |
+----+----------+-----+

我尝试分组,但这会产生不可预测的结果。我的猜测是嵌套查询,首先开始查找最高优先级,如下所示:

select max(priority),sub from t group by sub

这给了我

+----------+-----+
| priority | sub |
+----------+-----+
|    4     |  A  |
|    9     |  B  |
+----------+-----+

但我也需要 ID,添加到查询中显然给了我错误的 ID,将这个结果与同一张表上的查询结合起来给了我一个错误 (ER_NONUNIQ_TABLE(1066)),这是有道理的......任何可以推动我的人在正确的方向?

4

1 回答 1

3

PRIORITY子查询背后的想法是它分别获取每个的最大值SUB。然后将其结果连接回原始表。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  sub, max(priority) maxVal
            FROM    tableName
            GROUP BY sub
        ) b ON a.sub = b.sub AND
                a.priority = b.maxVal
于 2012-12-17T22:44:49.843 回答