2010-10-26 26 views
6

Veritabanımızın, aynı fatura numarasına sahip, ancak farklı tarih ve farklı notlara sahip bir grup kaydı vardır.TSQL, en yüksek tarihe göre ayrı seçilmesi

yüzden ben ayrı fatura numaraları, tarihi ve not seçmeniz gerekir

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 

gibi bir şey olabilir. en son tarihle kayıt için.

yani benim sonuç nasıl bunu yapmak mümkün sadece

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

olduğunu içermelidir? Teşekkürler!

cevap

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

Bu benim bunu yapmak için gerekli tam olarak ne yaptı. Çok teşekkür ederim! – twal

1

Dene:

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

İç sorgunuzun yanlış olduğunu düşünüyorum ... sadece 1 satır geri dönecek. Sonra tüm sorgu sadece bir satır döndürür ... – Martin

9

Kullanım analitik fonksiyonlar:

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

Teşekkürler Vincent. Bütün gün boyunca bu çözümü arıyordum. Sen benim günümü yaptın :) – Maverick

İlgili konular