本文参考html
http://zhidao.baidu.com/link?url=8su4F16Et8Q0S3FmybwniJSI51Ms0AeVujcEXhyEaZh3u5LlOng5Xri_9zHsl73eEnxAswQkHe3x3OZd-jgSSa函数
http://www.cnblogs.com/fxgachiever/archive/2010/09/15/1826792.htmlurl
今天我遇到这样的一个问题,我要取TableA中的School分组中的一条最新记录,是每一个School分组中的一条。spa
好比:School列中有以下3种值,GDUT,SYSU,SCUT,那么个人要求就是分别获取GDUT,SYSU,SCUT最新的记录,htm
排序依靠插入的记录的时间InsDate字段。blog
本人是SQL小白,因此不太懂?So,百度。。。。。。看到别人给出的答案以下:排序
select * from
(
select row_number() over(partition by '分组' order by '日期' desc) as rownum -- 排序并分组
, * -- 所需显示的字段
from TableA
) as T
where T.rownum = 1博客
按照他的提示,果真能实现我想要的东西。一高兴,就写下篇博客记录一下本人的理解,高手勿喷。。。。it
【partition】:有道了一下 ,意思是分割、分隔、区分。这里的做用是TableA根据'分组'这个字段来分组,因此io
变成GDUT一个组,SYSU一个组,SCUT一个组,分组是为了使用Row_number()函数。
【oerder】 :跟咱们平时使用的Order 的做用同样,是跟分组按某个字段进行排序,这里是按'日期'来排序
【row_number】:是给分组排序,每一个分组的序号都从1开始,好比GDUT组有10条记录,序号就是1-10,SYSU组
有15条记录,序号就是1-15.
【rownum】:这是只是给分组后的序号一个别名。
【*】:查询TableA表的全部字段,select row_number() over(partition by '分组' order by '日期' desc) as rownum ,*
from TableA 有种视图的味道。
【T】:T也只是一个别名。
【T.rownum = 1】:T表中rownum=1的列,就是说最新的一列