關於 點部落 團隊
我們是一群普通的程式設計人員,在各自不同的領域發展, 由於對 IT 知識社群發展有一股的熱誠,所以我們一起創造了這個平台, 我們希望透過 點部落平台 能夠創造出更好的 IT 知識技術分享環境。 歡迎您參與點部落,也請給我們意見與指教,讓我們能夠持續的改善, 營造出更好的環境及平台。tw.dotblogs@gmail.com

常用連結

最新回應

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

首先先說明一下,資料的欄位結構,有兩個資料表 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

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


DotBlogs Tags: TSQL

回應

  • fphoenix 2008/5/26 下午 11:17 回覆

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

    SELECT

      CategoryId,

      Max(ImageId)

    FROM

      ImageS

    GROUP BY

      CategoryId

    關聯式子查詢,我是能不用就不用,

    這樣子好像也能達到需求。

  • dotjum 2008/5/27 下午 02:01 回覆

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

    to fphoenix :
    謝謝你的回應,繞了一大圈,原來你用的簡單語法就可以解決了。

  • joyce 2008/6/12 下午 12:08 回覆

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

    請問我的table iesa00d1 有三個欄位
    我要找出每一個 el_no 的最後一個 sa_date 的 sa_price
    要如何下指令


    el_no sa_price sa_date

    02-D015 800.000 2002/10/24
    02-D015 500.000 2002/07/13
    02-D015 550.000 2001/03/13
    02-D036 640.000 2008/03/01
    02-D036 630.000 2008/02/01
    02-D036 635.000 2008/01/03










  • dotjum 2008/6/12 下午 09:37 回覆

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

    Hi Joyce:
    我的方法需要一個不重複的 Identity 欄位
    02-D015  800 2002-10-24 00:00:00.000 1
    02-D015  900 2002-07-14 00:00:00.000 2
    02-D015  550 2002-03-13 00:00:00.000 3
    02-D036  640 2008-03-01 00:00:00.000 4
    02-D036  540 2008-02-01 00:00:00.000 5
    02-D036  340 2008-01-01 00:00:00.000 6
    然後使用語法如下


    就能查出你最後一天的價錢
     


*標 題:

*姓 名:

 電子郵件: (將不會被顯示)

 個人網頁:

*回應

登入後使用進階評論

Please add 7 and 8 and type the answer here: