2010-10-26 11 views
6

Nasza baza danych zawiera kilka rekordów, które mają ten sam numer faktury, ale mają różne daty i różne notatki.Określanie TSQL w zależności od najwyższej daty

więc może masz coś podobnego

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 

muszę wybrać odrębne faktury liczby, daty i notatki. dla rekordu z najnowszą datą.

więc mój wynik powinien zawierać tylko

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

jak to możliwe, aby to zrobić? Dzięki!

Odpowiedz

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

to zrobił dokładnie to, co potrzebne jest do zrobienia. Dziękuję Ci bardzo! – twal

1

Spróbuj:

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

Myślę, że twoja wewnętrzna kwerenda jest błędna ... to zwróci tylko 1 wiersz. Wtedy całe zapytanie zwróci tylko jeden wiersz ... – Martin

9

użyciu funkcje analityczne:

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

Dzięki Vincent. Szukałem tego rozwiązania przez cały dzień. Zrobiłeś mój dzień :) – Maverick

Powiązane problemy