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

2015-02-03 12:18:30 · 作者: · 浏览: 32

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

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

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

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

\

\

现在需要做的事,把这个数据按照[CustomerCaseNo]分组以后 取出PaymentsTime字段里面的最近时间,要做到这个,用下面的语句就可以实现<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPGg1PnNlbGVjdCAqIGZyb20oIHNlbGVjdCBTdG9yZXNObyxbQ3VzdG9tZXJDYXNlTm9dLFtQYXltZW50c1RpbWVdLCBST1dfTlVNQkVSKCkgIG92ZXIocGFydGl0aW9uIGJ5IEN1c3RvbWVyQ2FzZU5vIG9yZGVyIGJ5IFtQYXltZW50c1RpbWVdIGRlc2MpIGFzIHJvd051bTxicj4KZnJvbSBCQUxfcGF5bWVudHNTd2lmdEluZm8gd2hlcmUgU3RvcmVzTm89"zq00000034') ranked where ranked.rowNum <= 1 order by ranked.CustomerCaseNo, ranked.PaymentsTime desc 当执行完红字部分的SQL语句,就出现如下结果 \


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