每個分類取最新的幾條的SQL實現

2021-04-23 20:29:32 字數 1033 閱讀 3475

問題點:分類統計時候,我們可能經常會碰到這樣的需求,每個分類按照一定順序,取幾條資料,然後在一起顯示。

這個問題的解決方法,我們通過搜尋引擎,可以找到很多中。但是不是sql語句過於複雜,就是在資料量比較大時候,效能特別成問題。

問題詳細描述如下:

比如,假設我們有下面這樣結構的一張表,這張表的資料量非常巨大。

create

table

table1

([id] [bigint] identity(1,1) not

null,

[name] [nvarchar](128) not

null,

[class] int

notnull,

[date] datetime

notnull

)

class 表示分類編號。 分類數不固定, 至少有上千種分類

date 表示該條記錄被更新的時間

我們現在想獲得每個分類最新被更新的5條記錄。

解決方案:

select id,name,class,date

from(select id,name,class,date ,row_number() over(partition by class order

bydate

desc)as rowindex from

table1) a where rowindex <= 5

解決方案簡單說明:

這個解決方案的關鍵就是使用了sql 2005 的 row_number 這個全新的函式。

row_number ( ) 函式的語法如下:

row_number ( )     over ( [ ] )

over 子句中的 partition by 將結果集分為多個分割槽。

over 子句中的 order by 將對 row_number 進行排序。

每個分類取最新的幾條的SQL實現

分類統計時候,我們可能經常會碰到這樣的需求,每個分類按照一定順序,取幾條資料,然後在一起顯示。這個問題的解決方法,我們通過搜尋引擎,可以找到很多中。但是不是sql語句過於複雜,就是在資料量比較大時候,效能特別成問題。今天我就碰到這樣乙個需求。而我自己的解決方案就是sql過於複雜,或者效能比較差的。為...

每個分類取最新的幾條的SQL實現

分類統計時候,我們可能經常會碰到這樣的需求,每個分類按照一定順序,取幾條資料,然後在一起顯示。這個問題的解決方法,我們通過搜尋引擎,可以找到很多中。但是不是sql語句過於複雜,就是在資料量比較大時候,效能特別成問題。今天我就碰到這樣乙個需求。而我自己的解決方案就是sql過於複雜,或者效能比較差的。為...

每個分類取最新的幾條的SQL實現

分類統計時候,我們可能經常會碰到這樣的需求,每個分類按照一定順序,取幾條資料,然後在一起顯示。這個問題的解決方法,我們通過搜尋引擎,可以找到很多中。但是不是sql語句過於複雜,就是在資料量比較大時候,效能特別成問題。今天我就碰到這樣乙個需求。而我自己的解決方案就是sql過於複雜,或者效能比較差的。為...