2010-10-26 28 views
6

Nel nostro database sono presenti numerosi record con lo stesso numero di fattura, ma con date e note diverse.Selezione TSQL distinta in base alla data più alta

così si potrebbe avere qualcosa di simile

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 

ho bisogno di selezionare le diverse fattura numeri, date e note. per la cronaca con la data più recente.

quindi il mio risultato dovrebbe contenere solo

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

come è possibile fare questo? Grazie!

risposta

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

Questo ha fatto esattamente quello che mi serviva di fare. Grazie mille! – twal

1

Prova:

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

Penso che la tua query interna sia sbagliata ... restituirà solo 1 riga. Quindi l'intera query restituirà solo una riga ... – Martin

9

Utilizzare le funzioni di analisi:

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

Grazie Vincent. Stavo cercando questa soluzione tutto il giorno. Hai reso la mia giornata :) – Maverick

Problemi correlati