对于n = 2,您可以
SELECt max(column1) m FROM table tGROUP BY column2UNIOnSELECt max(column1) mFROM table tWHERe column1 NOT IN (SELECt max(column1) WHERe column2 = t.column2)
对于任何n,您都可以使用此处介绍的方法模拟分区之上的排名。
编辑:其实这个文章会给你你需要什么。
基本上是这样的
SELECT t.*FROM (SELECt grouper, (SELECT val FROM table liWHERe li.grouper = dlo.grouperORDER BY li.grouper, li.val DESCLIMIT 2,1) AS mid FROM ( SELECt DISTINCT grouper FROM table ) dlo ) lo, table tWHERe t.grouper = lo.grouper AND t.val > lo.mid
用
grouper要分组
val的列的名称和保存值的列的名称替换。
要弄清楚它的功能是如何进行的,请从最内部的查询中逐步进行并运行它们。
而且,有一点简化-
mid如果某些类别没有足够的值,则子查询可以返回NULL,因此应该在比较中将该常量保留为COALESCE(在您的情况下为MIN,
val的域,在本文中为MAX)。
EDIT2: 我忘了提到确定n(LIMIT n,1)的是LIMIT 2,1。



