取每组的第二最大值,如何使用SQL实现

取每组的第二最大值,如何使用SQL实现,第1张

分别取每组的第二最大值,如何使用SQL实现:

select * from

(

select row_number() over(partition by '分组' order by '日期') as rownum --

排序并分组

, * -- 所需显示的字段

from 表

) as T

where T.rownum = 1

对每组的数据按日期排序并加上行号

取出时只取行号为1,也就是第一条数据。

各个数据库的方法并非一样

Mysql:

1

SELECT * FROM tbl LIMIT 0,100

SQL Server:

1

SELECT * FROM tbl WHERE id IN (SELECT TOP 100 id FROM tbl)

Oracle:

1

SELECT * FROM tbl WHERE rownum <= 100

select max(value) from customer 返回的是包括最大值的表 ,是不能与一个值比较的,应该用 in 或 not in *** 作符,即:

select max(value) from customer where value not in (select max(value) from customer)

在查询中,in 或 not in *** 作符是索引失效,速度变慢,可以用以下表连接的方法,

select max(value) from (select value from customer) as a left join (select max(value) as c from customer) as b on b.c=a.value where b.c is null

一般来说,以上两种方法的执行速度 表连接的方法好些,但也应该进行测试,我认为,采用两次查询的方法比较合适,select max(value) from customer 得到最大值,

select max(value) from customer where value <6003

得到次大值。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9630045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存