2012-02-15 18 views
6

i bir tablo var adlandırılmış customer_age seçmek sql:birden kayıtlarından böyle loks yalnızca en son

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 

ve ben her adından yalnızca ilk kaydını görüntülemek istiyor. Bunun gibi bir şey şu ana kadar çalışamamıştım. i sql server 2005 kullanıyorum Herhangi bir yardım için teşekkür ederiz ...

+7

"İlk kayıt" en düşük kimliğe sahip olanı ifade eder? –

cevap

13

her isim için en düşük kimliğini bulmak ve ana tablodan kayıtları çekmeye kimlikleri bu seti kullanmak subselect kullanmayı deneyin:

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

İlk kaydın en yüksek ID olduğu varsayılarak, sorgunuzu azalan orderby ID ve TOP n.

1

Sadece cross apply kullanarak her isim için ilk kaydını seçin:

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

Bu, tekrarlanan sonuçlar verir, customer_age dosyasındaki 3 satır, başvurudan dönen 1 satırla birleştirilir. – Umair

2

Pencere işlevleri nasıl kullanılır?

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 
İlgili konular