MySQL如何以升序选择第2行重复的列值

时间:2019-07-03 01:44:28

标签: mysql

我有这样一张桌子:

id1  |  id2  |  id3
-------------------
 1      'B'       1
 1      'B'       2
 1      'C'       1
 1      'C'       2
 2      'A'       1
 2      'A'       2

我要从此表中检索包含id1然后是id2的最低组合的行。因此,第一个查询将返回前两行:最低的id1是1,而其中的最低的id2是'B'。然后,如果我删除它们,则第二个查询将返回第三和第四行。

我有以下查询:

select * 
from table_1 
where id2 = (
    select min(id2) 
    from table_1 
    where id1 = (
        select min(id1) 
        from table_1
    )
)

这是最好的方法吗?

1 个答案:

答案 0 :(得分:2)

我将在此处使用RANK

WITH cte AS (
    SELECT *, RANK() OVER (ORDER BY id1, id2) rnk
    FROM yourTable
)

SELECT id1, id2, id3
FROM cte
WHERE rnk = 1;

这假设您正在使用MySQL 8+。如果没有,还有其他方法可以处理您的查询,但是如果您长期需要这种查询,请考虑升级。

如果您使用的是MySQL 5.7或更早版本,请使用以下版本:

SELECT id1, id2, id3
FROM yourTable
WHERE
    id1 = (SELECT MIN(id1) FROM yourTable) AND
    id2 = (SELECT MIN(id2) FROM yourTable
           WHERE id1 = (SELECT MIN(id1) FROM yourTable));

Demo