SQL查詢每個分組的前N條記錄

2021-06-19 03:30:10 字數 1005 閱讀 6228

在寫乙個儲存過程中,遇到了乙個問題,自己寫的

sql總是執行效率太低,於是上網搜尋,學到了乙個新招,都怪自己平時不愛學習啊,不過這個語法真的很厲害。

需求:取乙個表中每個

id的最新三條資料(按照更新時間倒序取)

select * from #t as t where 3>(select count(*) from #t where gid=t.gid and date>t.date)
或是

select * from #t as t where id in(select top 3 id from #t where gid=t.gid order by date desc)

這是我的寫法,一共執行了。。。反正半分鐘後我就點了取消

網上有兩個寫法

1)使用

select distinct b.*

from #t as a

( select top(3) *

from #t

where a.gid=gid

order by date desc

) as b

2)使用

row_number()

進行排位分組

select id,gid,author,title,date

from

( select rid=row_number()

over(partition by gid

order by date desc),

*from #t

) as t

where rid<=3

**共有7萬多行資料,字段大概20個,第1)種方法執行9秒,第2)種方法執行3秒,網上牛人果然很多,受教了。

SQL查詢每個分組的前N條記錄

if object id tempdb.dbo.t is not null drop table t create table t id varchar 3 gid int,author varchar 29 title varchar 39 date datetime insert into t ...

SQL語句查詢每個分組的前N條記錄的實現方法

生成測試資料 t if object id tempdb.dbo.t is notnull drop table t create table t id varchar 3 gid int,author varchar 29 title varchar 39 date datetime insert...

orcale 查詢分組後的前n條記錄

orcale 查詢分組後的前n條記錄 使用row number over partition by col1,col2 order by col3 desc 示例如下 select from select col1,col2,col4,row number over partition by col...