2010-10-26 11 views
6

Nuestra base de datos tiene un montón de registros que tienen el mismo número de factura, pero tienen diferentes fechas y notas diferentes.Selección de TSQL distinta según la fecha más alta

por lo que podría tener algo como

invoice date   notes 
3622  1/3/2010  some notes 
3622  9/12/2010 some different notes 
3622  9/29/1010 Some more notes 
4212  9/1/2009  notes 
4212  10/10/2010 different notes 

necesito para seleccionar las facturas distintos números, fechas y notas. para el registro con la fecha más reciente.

así que mi resultado debe contener solo

3622  9/29/1010 Some more notes 
4212  10/10/2010 different notes 

¿cómo es posible hacer esto? Gracias!

Respuesta

9
select invoice, date, notes 
from table 
inner join (select invoice, max(date) as date from table group by invoice) as max_date_table  
    on table.invoice = max_date_table.invoice and table.date = max_date_table.date 
+0

Esto hizo exactamente lo que necesitaba hacer. ¡Muchas gracias! – twal

1

Probar:

SELECT I.* 
FROM MyInvoice AS I 
INNER JOIN 
      (SELECT Invoice, MAX([Date]) AS MaxDate 
      FROM MyInvoice 
      GROUP BY Invoice 
      ) AS M ON I.Date = M.MaxDate 
       AND I.Invoice = M.Invoice 
+0

Creo que su consulta interna es incorrecta ... solo devolverá 1 fila. Entonces toda la consulta solo devolverá una fila ... – Martin

9

Uso de las funciones analíticas:

WITH TT AS (
    SELECT invoice, date, notes, RANK() OVER(PARTITION BY invoice ORDER BY date DESC) AS R 
    FROM table 
) 
SELECT invoice, date, notes 
FROM TT 
WHERE R = 1; 
+1

Gracias Vincent. Había estado buscando esta solución todo el día. Me has alegrado el día :) – Maverick

Cuestiones relacionadas