2013-03-04 42 views
0

我有一個SQL Server數據庫,我有兩個tables,CertificatesCategories。有一對多的關係,每個Certificate可以有很多categories。我試圖創建一個將顯示數據庫中所有證書的查詢,但只返回一個記錄,每個類別的歷史記錄最早。我查了一篇幾乎完全符合我要求的文章試圖創建一個查詢,返回所有記錄的最早日期

但是它正在搜索的記錄數量有限。我已經閱讀並發現在其他類型的數據庫中執行此操作的不同方法,但在ms sql server中沒有這樣做的有效方法。

回答

0

沒有解決,我知道的大多數數據庫查詢等一個有效的方法,稱爲JOIN。與PK-FK關係和索引一起,這對於你所遇到的大部分目標來說都是有效的。嘗試學習這些,你會發現我在說什麼。

對於這個特定的問題,你只需要JOIN兩個表和GROUP在類別字段上,使用MIN集合函數在exp日期字段。如果你可以提供表結構,我們也可以寫查詢。

+0

我決定回到你的建議的基礎知識,它似乎通過在查詢設計器中使用正確的groupby和MIN來工作,不需要編碼。感謝您回到步驟1 – user2125409 2013-03-04 16:42:09

2

對於這一點,你要使用的功能row_number()

select c.* 
from (select c.*, 
      row_number() over (partition by category order by expdate desc) as seqnum 
     from certificates c 
    ) c 
where seqnum = 1 

這個工程於2005年和更大的SQL Server版本。

在舊版本或訪問,你需要做一個連接來得到這個:

select c.* 
from certifications c join 
    (select category, max(expdate) as maxexpdate 
     from certifications 
     group by category 
    ) csum 
    on c.category = csum.category and 
     c.expddate = csum.maxexpdate 
0

以下查詢將符合需要。

SELECT * 
    FROM dbo.Certificates Cert INNER JOIN 
    (SELECT CerificateId,MIN(ExpiryDate) 
    FROM dbo.Categories 
    GROUP BY CerificateId) AS LatestCategories 
    ON Cert.CerificateId = LatestCategories.CerificateId 
相關問題