2012-02-15 109 views
6

我有一個表,名爲customer_age是loks這樣的:sql中從多個記錄只選擇最近的

ID  1 2 3  4  5 6  7  8  9 

NAME JIM JIM JIM NICK NICK NICK Paul Paul Paul          
VALUE 20 13 12 10 20 8  4  24 14 

,我想只顯示來自每個名稱的第一個記錄。像這樣的東西

ID  1  4  7  

NAME JIM NICK Paul         
VALUE 20 10  4  

到目前爲止,我還沒有能夠解決它。 我使用SQL服務器2005 任何幫助,將不勝感激...

+7

我假設「第一條記錄」是指ID最低的那條? – 2012-02-15 15:05:51

回答

13

嘗試使用子查詢查找每個名稱最低的ID,並使用該集ID從主表拉記錄:

SELECT ID, Name, Value 
FROM customer_age 
WHERE ID IN 
(
    SELECT MIN(ID) AS ID 
    FROM customer_age 
    GROUP BY Name 
) 
1

假設第一個記錄意味着最高的ID,你可以嘗試按降序排列ID和TOP n的查詢。

1

只要選擇使用cross apply每個名稱的第一個記錄:

SELECT 
ca.ID, ca.NAME, ca.VALUE 
FROM customer_age c 
CROSS APPLY (SELECT TOP 1 ID, NAME, VALUE 
     FROM customer_age ca 
     WHERE ca.NAME = c.NAME ORDER BY ID) ca 
ORDER BY ca.ID 
+0

這給出了重複的結果,customer_age連接中的3行與apply中返回的1行。 – Umair 2012-02-15 18:21:09

2

如何使用窗口函數?

SELECT Id, Name, Value 
FROM (
    SELECT Id, Name, Value, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Id ASC) AS rowNum 
    FROM customer_age 
) AS sub 
WHERE rowNum = 1 
相關問題