文章詳情頁
SQL Server實現查詢每個分組的前N條記錄
瀏覽:19日期:2023-03-06 14:25:16
SQL語句查詢每個分組的前N條記錄的實現方法:
1、生成測試數據: #T
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 #Tselect "001", 1, "鄒建", "深入淺出SQLServer2005開發管理與應用實例", "2008-05-10"union allselect "002", 1, "胡百敬", "SQLServer2005性能調校", "2008-03-22"union allselect "003", 1, "格羅夫Groff.J.R.", "SQL完全手冊", "2009-07-01"union allselect "004", 1, "KalenDelaney", "SQLServer2005技術內幕存儲引擎", "2008-08-01"union allselect "005", 2, "Alex.Kriegel.Boris.M.Trukhnov", "SQL寶典", "2007-10-05"union allselect "006", 2, "飛思科技產品研發中心", "SQLServer2000高級管理與開發", "2007-09-10"union allselect "007", 2, "胡百敬", "SQLServer2005數據庫開發詳解", "2008-06-15"union allselect "008", 3, "陳浩奎", "SQLServer2000存儲過程與XML編程", "2005-09-01"union allselect "009", 3, "趙松濤", "SQLServer2005系統管理實錄", "2008-10-01"union allselect "010", 3, "黃占濤", "SQL技術手冊", "2006-01-01"union allselect "010", 4, "黃蛋蛋", "SQL技術手冊蛋蛋", "2006-01-01";
2、表記錄查詢如下:
select * from #T;
結果:
3、按GID分組,查每個分組中Date最新的前2條記錄
(1)用子查詢
--1.字段ID唯一時: select *from #T as Twhere ID in (select top 2 ID from #T where GID=T.GID order by Date desc);--2.如果ID不唯一時: select *from #T as Twhere 2>(select count(*)from #T where GID=T.GID and Date>T.Date);
(2)使用SQL Server 2005 使用新方法ROW_NUMBER()進行排位分組
select ID, GID, Author, Title, Datefrom( select rid=row_number() over (partition by GID order by Date desc), * from #T) as Twhere rid<=2;
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。
標簽:
MsSQL
上一條:SQL中的連接查詢詳解下一條:SQL Server備份數據庫的完整步驟
相關文章:
1. 在SQL Server2005中用語句創建數據庫和表2. SQL Server: convert varbinary to varchar3. SQL Server兩表數據同步的多種方法詳解4. 使用Microsoft SQL Server 2000的XML查詢5. sql server關于函數中如何使用Getdate()6. sql server 2005 批量導入導出7. SQL SERVER中一些常見性能問題的總結8. 讓SQL Server也能使用2G以上內存9. Sql server觸發器示例10. SQL Server 2005 讀取xml 文件 突破 varchar 8000 限制
排行榜