[TSQL]查詢指定分類下最新一筆的資料

採用的方法是希望下一次TSQL就能夠解決,而不是在.cs中取的 categoryid 丟入到TSQL內取TOP 1
這樣的方式會增加很多各連線出來,所以希望下一次TSQL命令就可以解決。

今天與同事剛好要做找分類下的最新一筆資料,就討論出兩種查詢的方法,
就跟大家分享一下,

首先先說明一下,資料的欄位結構,有兩個資料表 LinkCategories (是Master ) 1 : *  Images (是Detail)
然後關連的欄位是 categoryid
SELECT CategoryID  FROM dbo.LinkCategories
image

SELECT imageid,categoryid fROM dbo.Images

image 

我們要找出的資料就是每一個分類下最新的imageid
image

採用的方法是希望下一次TSQL就能夠解決,而不是在.cs中取的 categoryid  丟入到TSQL內取TOP 1
這樣的方式會增加很多各連線出來,所以希望下一次TSQL命令就可以解決。
大概想了一下,我的解法是
1.先 Group by categoryid 
2.透過MAX() 取出最大的imageid  (ps.條件方面大家可以依狀況改變)
3.最後取到的都是最新的imageid 再來跟 IN


WHERE  ImageID IN
    (
    SELECT MAX(ImageID )
    FROM Images AS i2      
    GROUP BY(CategoryID)     
    )

而同事的另一種處理方法則是
在子查詢 SELECT 欄位的時候是透過欄位來產生最大ImageID ,
透過欄位相等的概念,然後在同一個 categoryid  都是會查出對應 DESC 後的 TOP 1 imageID


WHERE ImageID IN
(
SELECT  
   (SELECT TOP 1 ImageID FROM dbo.ImageS 
   Where CategoryID = LinkCategories.CategoryID 
    order by ImageID DESC)
    FRom dbo.LinkCategories
)

兩種解法都可以讓最後的答案變成透過一次的命令,就能查出分類下最新的imageid
image 當然可以延伸拿來查每天的最新的一筆(論壇最適合這種)或訂單的最後一筆 等等....
至於哪一種方法比較好,就要看狀況來決定,但兩種方法再加上 WHERE 條件都能降低查詢出來的資料,
達成要查詢的任務,並且避免增加過多的連線數,不知道大家還有沒有其他方法,也可以一起分享討論。