Mysql 选择除每个不同客户的最大订单之外的所有订单
很抱歉格式不好,但作为一个更大问题的一部分,我创建了一个生成此表的查询:Mysql 选择除每个不同客户的最大订单之外的所有订单,mysql,sql,Mysql,Sql,很抱歉格式不好,但作为一个更大问题的一部分,我创建了一个生成此表的查询: id id2 4 7 4 6 1 3 1 2 1 1 如何提取每个id1没有最高id2的行 我想要的是: id id2 4 6 1 2 1 1 我似乎只知道如何从整体上消除MaxID2,但不能针对每个不同的id1。如果您能帮助区分每个id1的最大id2,我们将不胜感激。您可以尝试下面的方法- select a.id, a.id2 from
id id2
4 7
4 6
1 3
1 2
1 1
如何提取每个id1没有最高id2的行
我想要的是:
id id2
4 6
1 2
1 1
我似乎只知道如何从整体上消除MaxID2,但不能针对每个不同的id1。如果您能帮助区分每个id1的最大id2,我们将不胜感激。您可以尝试下面的方法-
select a.id, a.id2
from tablename a
where a.id2 <> (select max(a1.id2) from tablename a1 where a.id=a1.id)
如果您使用的是MySQL 8+,那么RANK提供了一个选项:
WITH cte AS (
SELECT id, id2, RANK() OVER (PARTITION BY id ORDER BY id2 DESC) rnk
FROM yourTable
)
SELECT id, id2
FROM cte
WHERE rnk > 1
ORDER BY id DESC, id2 DESC;
代替where中的相关子查询,您可以离开JOIN并应用notin
select id, id2
from yourTable YT
LEFT JOIN
( select id, max( id2 ) highestID2
from YourTable
group by id ) TopPerID
on YT.ID = TopPerID.ID
AND YT.ID2 != TopPerID.highestID2
where TopPerID.id IS NULL
由于id值只能有一个id2值,因此还需要检查这种情况,可以通过比较联接中的MAXid2值和MINid2值来执行此操作:
如果一个id1只有一个id2值怎么办?它将输出具有该id2值的行
SELECT t1.*
FROM Table1 t1
JOIN (SELECT id, MAX(id2) AS max_id2, MIN(id2) AS min_id2
FROM Table1
GROUP BY id) t2 ON t2.id = t1.id
AND (t1.id2 < t2.max_id2 OR t2.min_id2 = t2.max_id2)
id id2
4 6
1 2
1 1
2 5