Mysql 如何在SQL中限制一列中的每个特定值

Mysql 如何在SQL中限制一列中的每个特定值,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,对不起,如果这是一个愚蠢的问题。我可以在order BY函数中对我的列进行排序,我可以使用LIMIT函数,但它只给我最大值,但我需要每个最大值限制 我的虚拟表在这里: Col-a col-b A 1001 B 1000 B 999 C 998 A 997 C 996 A 995 A 994 A 993 A 992 B 991 C

对不起,如果这是一个愚蠢的问题。我可以在
order BY
函数中对我的列进行排序,我可以使用
LIMIT
函数,但它只给我最大值,但我需要每个最大值限制

我的虚拟表在这里:

Col-a   col-b
A        1001
B        1000
B        999
C        998
A        997
C        996
A        995
A        994
A        993
A        992
B        991
C        990
我的期望是(极限3;)

我使用了
FIELD()
,但不幸的是我无法管理。我们怎样才能订购那个特定的电话

按函数顺序对所有值进行排序,但我需要为每个值取一个特定的数字。当我使用
LIMIT
功能时,仅剪切顶部值 问题是如何在“1列”中排列每个不同的值

编辑: 我试过了


可能有一种更有效的方法,但这可能会让你达到你想要的目的:

SELECT group_a.col_a AS col_a
       ,group_a.col_b AS col_b
       ,group_b.col_a AS col_c
       ,group_b.col_b AS col_d
       ,group_c.col_a AS col_e
       ,group_c.col_b AS col_f
FROM (SELECT col_a, col_b FROM my_table WHERE col_a = 'A' ORDER BY col_b DESC LIMIT 100) as group_a,
     (SELECT col_a, col_b FROM my_table WHERE col_a = 'B' ORDER BY col_b DESC LIMIT 100) as group_b,
     (SELECT col_a, col_b FROM my_table WHERE col_a = 'C' ORDER BY col_b DESC LIMIT 100) as group_c

提供您所需的内容,尽管格式略有不同。请检查并让我知道这是否适合您

从audit.latest_作业实例中选择COL-A、MIN(COL-B)、lead(MIN(COL-B)、1)over(order by MIN(COL-B))、lead(MIN(COL-B)、2)over(order by MIN(COL-B)) 其中COL-B不为null 按COL-A分组

试试这个: 根据分区列a给出等级,并按列b说明进行排序。
选择可以粘贴查询的行?请参见我编辑的@zenwraight@Axis你也可以粘贴你想要的输出吗?我不清楚你的问题,对不起,A、B、C是否已修复?请阅读有关格式化代码的编辑帮助。您可以在编辑框下方看到格式化输出。
SELECT col_a,col_b FROM my_table 
order BY FIELD(col_b, 'A','B','C') limit 100;
SELECT group_a.col_a AS col_a
       ,group_a.col_b AS col_b
       ,group_b.col_a AS col_c
       ,group_b.col_b AS col_d
       ,group_c.col_a AS col_e
       ,group_c.col_b AS col_f
FROM (SELECT col_a, col_b FROM my_table WHERE col_a = 'A' ORDER BY col_b DESC LIMIT 100) as group_a,
     (SELECT col_a, col_b FROM my_table WHERE col_a = 'B' ORDER BY col_b DESC LIMIT 100) as group_b,
     (SELECT col_a, col_b FROM my_table WHERE col_a = 'C' ORDER BY col_b DESC LIMIT 100) as group_c
select [col-a], [col-b]
from
( select [col-a], [col-b], row_number() over(partition by [col-a] order by [col-b] desc) rnk from table2 
) tbl
where rnk <= 3