2012-06-16 14 views
7

Ho un tavolo, myTable che contiene due campi ID e patientID. Lo stesso patientID può essere nella tabella più di una volta con un ID diverso. Come posso assicurarmi di ottenere solo l'istanza ONE di ogni patientID?Selezionare la prima istanza di un record

EDIT: So che questo non è il design perfetto, ma ho bisogno di ottenere alcune informazioni dal database e oggi e poi ripararlo in seguito.

+0

Esistono criteri per decidere quale record restituire o vuoi restituire qualcuno a caso? –

+0

'top 1' restituisce solo un record. Mi serve esattamente un'istanza di ogni ID paziente. Non importa quale tblClaims.id sia lasciato fuori. – wootscootinboogie

+1

Quindi la soluzione utilizzando un CTE è la strada da percorrere –

risposta

20

si potrebbe usare un CTE con ROW_NUMBER funzione:

WITH CTE AS(
    SELECT myTable.* 
    , RN = ROW_NUMBER()OVER(PARTITION BY patientID ORDER BY ID) 
    FROM myTable 
) 
SELECT * FROM CTE 
WHERE RN = 1 
+3

Avrei revocato questa risposta dieci volte se fosse possibile. – AFract

0

Il modo più semplice sarebbe aggiungere LIMIT 1 alla fine della query. Ciò garantirà che solo una riga singola venga restituita nel set di risultati.

+1

LIMIT è MySql, non è vero? –

+0

sì, il limite non è in sql server – wootscootinboogie

+0

è 'SELECT TOP 1 ...' in MSSQL –

3

Sembra che tu stia cercando DISTINCT:

SELECT DISTINCT patientID FROM myTable 

si può ottenere lo stesso "effetto" con GROUP BY:

SELECT patientID FROM myTable GROUP BY patientID 
+0

Non esattamente. L'ID paziente può essere visualizzato nella tabella più di una volta con un diverso tblclaims.id. Quindi se seleziono distinto, ciò fa sì che ottenga che patientID restituisca più di una volta – wootscootinboogie

+0

@wootscootinboogie solo se aggiungi più campi alle proiezioni che stai selezionando. 'DISTINCT' di solo' patientID' dovrebbe darti quello che ti serve. se si esegue 'DISTINCT patiendID, ID' allora sì, si ottengono combinazioni distinte quindi più di un' patientID' –

Problemi correlati