分别取每组的第二最大值,如何使用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
得到次大值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)