2012-02-15 29 views
6

ho una tabella denominata customer_age che loks come questo:SQL SELECT da più record solo il più recente

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 

e voglio visualizzare solo il primo record da ogni nome. Qualcosa di simile

ID  1  4  7  

NAME JIM NICK Paul         
VALUE 20 10  4  

Finora non sono stato in grado di lavorare fuori. utilizzo sql server 2005 Qualsiasi aiuto sarebbe apprezzato ...

+7

Suppongo che "prima registrazione" si intende quella con l'ID più basso? –

risposta

13

Provare a usare un subselect per trovare l'ID più basso per ogni nome, e l'uso che insieme di ID per tirare i record dalla tabella principale:

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

Supponendo che il primo record indichi l'ID più alto, è possibile provare la query con ID decrescente ID e TOP n.

1

basta selezionare il primo record per ogni nome con 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

Questo dà risultati ripetuti, 3 righe in join cliente_age con la riga 1 restituita da applicare. – Umair

2

Come utilizzare le funzioni della finestra ??

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 
Problemi correlati