欢迎投稿

今日深度:

SQL数据分组后取最大值或者取前几个值(按照某一

SQL数据分组后取最大值或者取前几个值(按照某一列排序),sql最大值


今日做项目的时候,项目中遇到需要将数据分组后,分组中的最大值,想了想,不知道怎么做,于是网上查了查,终于找到了思路,经过比较这个查询时目前用时最快的,其实还有别的方法,但是我觉得我们只掌握最快的方法就行 ,好了,不说废话了!

直接上内容吧:以下数据是通过

SELECT [CustomerCaseNo],[PaymentsTime] FROM [BOMSDatabase].[dbo].[BAL_paymentsSwiftInfo] where StoresNo='zq00000034' group by CustomerCaseNo,[PaymentsTime] 

语句得到的,这个语句大家都会写了 



现在需要做的事,把这个数据按照[CustomerCaseNo]分组以后  取出PaymentsTime字段里面的最近时间,要做到这个,用下面的语句就可以实现

select * from( select StoresNo,[CustomerCaseNo],[PaymentsTime], ROW_NUMBER()  over(partition by CustomerCaseNo order by [PaymentsTime] desc) as rowNum
from BAL_paymentsSwiftInfo where StoresNo='zq00000034') ranked where ranked.rowNum <= 1 order by ranked.CustomerCaseNo, ranked.PaymentsTime desc
当执行完红字部分的SQL语句,就出现如下结果


达到我的要求,对数据分组以后,取出分组里面时间最近的数据记录,用到的SQL函数为 ROW_NUMBER()  over(partition by 分组字段order by 排序字段 desc)



SQL 分组筛选取标识最大的那一行

可以参考如下写法

select id,name,data from haha a where id= (select max(id) from haha b where a.name = b.name)

select id,name,data from haha a where not exists(select 1 from haha b where a.name = b.name and a.id < b.id)
 

sql查询 分组后 每组某字段值最大的一行所有列

create table #a(address char(2),fenshu varchar(8))
insert into #a values ('a1','s1')
insert into #a values ('a1','s2')
insert into #a values ('a2','s3')
insert into #a values ('a1','s7')
insert into #a values ('a2','s4')
insert into #a values ('a2','s8')
insert into #a values ('a1','s8')
insert into #a values ('a2','s9')

实际语法测试 应该加上 分组条件区别,否则会有重复记录被取出(a.address = b.address)
select * from #a a
where fenshu in (
select max( fenshu) from #a b where a.address = b.address
group by address)
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/1999.html NewsArticle SQL数据分组后取最大值或者取前几个值(按照某一列排序),sql最大值 今日做项目的时候,项目中遇到需要将数据分组后,分组中的最大,想了想,不知道怎么做,于是网上查了查,终于...
评论暂时关闭