日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

茴香豆的n种写法之②——Sql据多个条件 查询每个条件的前N条记录

發布時間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 茴香豆的n种写法之②——Sql据多个条件 查询每个条件的前N条记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
---------------------------------
--
?Author: liangCK 小梁
--
?Title : 查每個分組前N條記錄
--
?Date : 2008-11-13 17:19:23
--
-------------------------------

--> 生成測試數據: #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?#T
SELECT?'001',1,'鄒建','深入淺出SQLServer2005開發管理與應用實例','2008-05-10'?UNION?ALL
SELECT?'002',1,'胡百敬','SQLServer2005性能調校','2008-03-22'?UNION?ALL
SELECT?'003',1,'格羅夫Groff.J.R.','SQL完全手冊','2009-07-01'?UNION?ALL
SELECT?'004',1,'KalenDelaney','SQLServer2005技術內幕存儲引擎','2008-08-01'?UNION?ALL
SELECT?'005',2,'Alex.Kriegel.Boris.M.Trukhnov','SQL寶典','2007-10-05'?UNION?ALL
SELECT?'006',2,'飛思科技產品研發中心','SQLServer2000高級管理與開發','2007-09-10'?UNION?ALL
SELECT?'007',2,'胡百敬','SQLServer2005數據庫開發詳解','2008-06-15'?UNION?ALL
SELECT?'008',3,'陳浩奎','SQLServer2000存儲過程與XML編程','2005-09-01'?UNION?ALL
SELECT?'009',3,'趙松濤','SQLServer2005系統管理實錄','2008-10-01'?UNION?ALL
SELECT?'010',3,'黃占濤','SQL技術手冊','2006-01-01'

--SQL查詢如下:

--按GID分組,查每個分組中Date最新的前2條記錄


--1.字段ID唯一時:
SELECT?*?FROM?#T?AS?T?WHERE?ID?IN(SELECT?TOP?2?ID?FROM?#T?WHERE?GID=T.GID?ORDER?BY?Date?DESC)

--2.如果ID不唯一時:
SELECT?*?FROM?#T?AS?T?WHERE?2>(SELECT?COUNT(*)?FROM?#T?WHERE?GID=T.GID?AND?Date>T.Date)

--SQL Server 2005 使用新方法

--3.使用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<=2

--4.使用APPLY
SELECT?DISTINCT?b.*
FROM?#T?AS?a
CROSS?APPLY
(
????
SELECT?TOP(2)?*?FROM?#T?WHERE?a.GID=GID?ORDER?BY?Date?DESC
)?
AS?b


--結果
/*


ID?? GID???????? Author??????????????????????? Title?????????????????????????????????? Date
---- ----------- ----------------------------- --------------------------------------- -----------------------
003 1?????????? 格羅夫Groff.J.R.???????????????? SQL完全手冊???????????????????????????????? 2009-07-01 00:00:00.000
004 1?????????? KalenDelaney????????????????? SQLServer2005技術內幕存儲引擎?????????????????? 2008-08-01 00:00:00.000
005 2?????????? Alex.Kriegel.Boris.M.Trukhnov SQL寶典?????????????????????????????????? 2007-10-05 00:00:00.000
007 2?????????? 胡百敬?????????????????????????? SQLServer2005數據庫開發詳解??????????????????? 2008-06-15 00:00:00.000
009 3?????????? 趙松濤?????????????????????????? SQLServer2005系統管理實錄???????????????????? 2008-10-01 00:00:00.000
010 3?????????? 黃占濤?????????????????????????? SQL技術手冊???????????????????????????????? 2006-01-01 00:00:00.000

(6 行受影響)
*/

--得到每組前幾條數據
--
假設每組Col1中, Col3不會重復

--建立測試環境
Create?Table?TEST
(Col1?
Varchar(10),
Col2?
Varchar(10),
Col3?
Int)
--插入數據
Insert?TEST?Select?'BD1V','Label',?4
Union?All?Select?'BD1V',?'BATT',?2
Union?All?Select?'BD1V',?'ODD',?3
Union?All?Select?'BD1V',?'HDD',?5
Union?All?Select?'BD1V',?'LCD',?1
Union?All?Select?'BD1W','HDD',?3
Union?All?Select?'BD1W','RAM',?8
Union?All?Select?'BD1W','TP CABLE',?5
Union?All?Select?'BD1W','LCD',?6
Union?All?Select?'BD1W','Label',?2
Union?All?Select?'BL3',?'LCD CABLE',?7
Union?All?Select?'BL3',?'LABEL',?6
Union?All?Select?'BL3',?'LCD',?5
Union?All?Select?'BL3',?'RAM',?1
Union?All?Select?'BL3D',?'Label',?4
GO
--測試
--
方法一:
Select?Col1, Col2, Col3?From?TEST A
Where?(Select?Count(*)?From?TEST?Where?Col1?=?A.Col1?And?Col3?>?A.Col3)?<?3
Order?By?Col1, Col3?Desc
--方法二:
Select?Col1, Col2, Col3?From?TEST A
Where?Exists?(Select?Count(*)?From?TEST?Where?Col1?=?A.Col1?And?Col3?>?A.Col3?Having?Count(*)?<?3)
Order?By?Col1, Col3?Desc
--方法三:
Select?Col1, Col2, Col3?From?TEST A
Where?Col3?In?(Select?TOP?3?Col3?From?TEST?Where?Col1?=?A.Col1?Order?By?Col3?Desc)
Order?By?Col1, Col3?Desc
GO
--刪除測試環境
Drop?Table?TEST
--結果
/*

Col1 Col2?? Col3
BD1V HDD 5
BD1V Label 4
BD1V ODD 3
BD1W RAM 8
BD1W LCD?? 6
BD1W TP CABLE 5
BL3 LCD CABLE 7
BL3 LABEL 6
BL3 LCD?? 5
BL3D Label 4
*/

轉載于:https://www.cnblogs.com/thanks/archive/2011/12/14/2287608.html

總結

以上是生活随笔為你收集整理的茴香豆的n种写法之②——Sql据多个条件 查询每个条件的前N条记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。