2012-03-01 27 views
9

Estoy escribiendo una consulta, y he usado la solución en this thread y ha funcionado algo pero todavía estoy teniendo un problema.SQL - Seleccione el registro más reciente cuando hay un duplicado

Quiero seleccionar un grupo de registros que son en su mayor parte únicos, pero hay algunos que se producen dos veces. Quiero poder seleccionar solo el registro que tenga la fecha más reciente. Esta es mi consulta hasta el momento:

SELECT tb1.id,tb1.type,tb1.date 

FROM Table tb1 

WHERE tb1.type = 'A' OR 'B' 
AND tb1.date = (SELECT TOP 1 tb2.date 
       FROM Table tb2 
       WHERE tb2.date = tb1.date 
       ORDER BY tb2.date DESC) 

Esto funciona en lo que recupera el último disco de esos discos que tienen duplicados, pero aquellos registros que no tienen duplicados no aparecen en absoluto.

Gracias por cualquier ayuda, y mis disculpas si me he perdido algo súper obvio; Soy nuevo en el juego de SQL.

+0

¿Puede proporcionar datos de muestra de filas únicas que no se devuelven contra duplicados donde están las filas correctas? – kaj

+0

Tenga en cuenta que parece unirse a la fecha y no por otra cosa, por ejemplo, id. Es eso intencional? – kaj

+0

puede ser más específico? Usted dijo: "Quiero poder seleccionar solo el registro que tiene la fecha más reciente" y la última "pero los registros que NO tienen duplicados no aparecen en absoluto" ... me parecen dos cosas diferentes. – Diego

Respuesta

17

Hay algunas maneras de hacerlo, una forma es utilizar ROW_NUMBER así:

SELECT id, type, date 
FROM 
(
    SELECT tb1.id, tb1.type, tb1.Date, 
     ROW_NUMBER() OVER (PARTITION BY tb1.id ORDER BY tb1.Date DESC) AS RowNo 
    FROM Table tb1 
    WHERE tb1.type IN ('A','B') 
) x 
WHERE x.RowNo = 1 

Esto devolverá la fila para cada uno distinto Identificación valor que tiene la última fecha.

+0

Gracias AdaTheDev, esto resolvió el problema y he podido terminar la consulta sin más duplicados. –

+0

Pequeño error: tb2.Fecha debe ser tb1.Fecha – Vladimirs

Cuestiones relacionadas