今天與同事剛好要做找分類下的最新一筆資料,就討論出兩種查詢的方法,
就跟大家分享一下,
首先先說明一下,資料的欄位結構,有兩個資料表 LinkCategories (是Master ) 1 : * Images (是Detail)
然後關連的欄位是 categoryid
SELECT CategoryID FROM dbo.LinkCategories

SELECT imageid,categoryid fROM dbo.Images
我們要找出的資料就是每一個分類下最新的imageid

採用的方法是希望下一次TSQL就能夠解決,而不是在.cs中取的 categoryid 丟入到TSQL內取TOP 1
這樣的方式會增加很多各連線出來,所以希望下一次TSQL命令就可以解決。
大概想了一下,我的解法是
1.先 Group by categoryid
2.透過MAX() 取出最大的imageid (ps.條件方面大家可以依狀況改變)
3.最後取到的都是最新的imageid 再來跟 IN
SELECT imageid,categoryid FROM dbo.Images as i
WHERE ImageID IN
(
SELECT MAX(ImageID )
FROM Images AS i2
GROUP BY(CategoryID)
)
而同事的另一種處理方法則是
在子查詢 SELECT 欄位的時候是透過欄位來產生最大ImageID ,
透過欄位相等的概念,然後在同一個 categoryid 都是會查出對應 DESC 後的 TOP 1 imageID
SELECT imageid,categoryid FROM ImageS
WHERE ImageID IN
(
SELECT
(SELECT TOP 1 ImageID FROM dbo.ImageS
Where CategoryID = LinkCategories.CategoryID
order by ImageID DESC)
FRom dbo.LinkCategories
)兩種解法都可以讓最後的答案變成透過一次的命令,就能查出分類下最新的imageid
當然可以延伸拿來查每天的最新的一筆(論壇最適合這種)或訂單的最後一筆 等等....
至於哪一種方法比較好,就要看狀況來決定,但兩種方法再加上 WHERE 條件都能降低查詢出來的資料,
達成要查詢的任務,並且避免增加過多的連線數,不知道大家還有沒有其他方法,也可以一起分享討論。
2008/5/26 21:26|
閱讀數 : 685
|
我要推薦
|
|
文章分類:
TSQL
訂閱
DotBlogs Tags:
TSQL