本文參考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的列,就是說最新的一列