我有一张这样的表格:
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
)
)这是最好的方法吗?
发布于 2019-07-03 09:54:14
我会在这里使用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));
https://stackoverflow.com/questions/56861848
复制相似问题