2012-06-16 17 views
7

Tengo una tabla, myTable que tiene dos campos en ella ID y patientID. El mismo ID de paciente puede estar en la tabla más de una vez con una ID diferente. ¿Cómo puedo asegurarme de obtener solo ONE instancia de cada patientID?Seleccione la primera instancia de un registro

EDIT: Sé que este diseño no es perfecto, pero necesito obtener algo de información de la base de datos y hoy y luego arreglarlo más tarde.

+0

¿Hay algún criterio para decidir qué registro devolver? o quieres devolver a alguien al azar? –

+0

'top 1' solo devuelve un registro. Necesito exactamente una instancia de cada identificación de paciente. No importa qué tblClaims.id se omita. – wootscootinboogie

+1

Entonces la solución que usa un CTE es el camino a seguir –

Respuesta

20

Se puede usar un CTE con ROW_NUMBER función:

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

Yo renunciaría a esta respuesta diez veces si fuera posible. – AFract

0

La manera simple sería agregar LIMIT 1 al final de su consulta. Esto asegurará que solo se devuelva una sola fila en el conjunto de resultados.

+1

LIMIT es MySql, ¿o no? –

+0

sí, el límite no está en el servidor sql – wootscootinboogie

+0

es 'SELECCIONAR TOP 1 ...' en MSSQL –

3

Parece que usted está buscando DISTINCT:

SELECT DISTINCT patientID FROM myTable 

se puede obtener el mismo "efecto" con GROUP BY:

SELECT patientID FROM myTable GROUP BY patientID 
+0

No exactamente. El ID del paciente puede aparecer en la tabla más de una vez con un tblclaims.id diferente. Así que si selecciono distinct, eso hace que obtenga ese patientID devuelto más de una vez – wootscootinboogie

+0

@wootscootinboogie solo si agrega más campos a las proyecciones que está seleccionando. 'DISTINCT' de solo' patientID' debería darle lo que necesita. si haces 'DISTINCT patiendID, ID', entonces sí, obtendrás distintas combinaciones, así más de un' patientID' –

Cuestiones relacionadas