twal
twal

Reputation: 7039

TSQL selecting distinct based on the highest date

Our database has a bunch of records that have the same invoice number, but have different dates and different notes.

so you might have something like

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

I need to select the distinct invoice numbers, dates and notes. for the record with the most recent date.

so my result should contain just

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

how is it possible to do this? Thanks!

Upvotes: 8

Views: 10181

Answers (3)

p.campbell
p.campbell

Reputation: 100637

Try:

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

Upvotes: 1

Vincent Savard
Vincent Savard

Reputation: 35947

Use analytical functions :

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;

Upvotes: 13

Martin
Martin

Reputation: 11041

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

Upvotes: 9

Related Questions