T-Sql ile veritabanından tekrar eden kayıtlardan en son tarihli olanı getiren sorgu nasıl yapılır?

Merhaba arkadaşlar lazım olabileceğini düşündüğüm bir örnek sql sorgusu paylaşmak istiyorum.

Senaryo: Bir Fatura ve Fatura detay tablonuz var siz bu tablodan bir ürün koduna ait olan fatura bilgisini almak istiyorsunuz.
Ama şöyle bir durum var verdiğiniz ürün  kodu ile birden fazla ürün var bu ürünler birbirinden Grup Kodu ile ayrılıyor.
İstenen şey o ürün için her bir grup kodunda satın alınan son fatura bilgilerinin gelmesi. Örnek vermek gerekirsek aşağıda sadece join ile yapılmış istediğimiz şeyi vermeyen bir sorgu ve sonucu var. İstediğimiz şeyi anlatmak için paylaştım.

Hatalı Sorgu:

select FH.BelgeNo as FaturaNo, FHD.UrunId, FH.Tarih, UG.Grup as GrupKodu, FHD.Kodu,FHD.UrunAdi,FHD.BirimFiyat from FirmaHareketDetayi FHD
left join FirmaHareketleri FH on FH.ID = FHD.HareketId
left join Urunler U on U.UrunId = FHD.UrunId
left join UrunGruplari UG on UG.GrupId = U.GrupId
where FHD.Kodu = '2S619H307CF' and FH.FirmaId = 2610 order by Tarih desc

Hatalı Sonuç:


Resimde görüldüğü üzere PIERBURG grup kodlu ürün 2 kere gelmiş ürün farklı faturalarda satın alınmış gelmiş ama biz PIERBURG'un en son satın alınanını görmek istiyoruz. Yani FaturaNo'su 162044 olan gelmesin sadece büyük tarihli olan gelsin o zaman

Doğru Sorgu:

Doğru işlem için WITH ve row_number'ı devreye sokuyoruz. Tarihe göre büyükten küçüğe sıra numarası verip WITH sonucunda sırası sadece 1 olanı getir diyoruz. 

;with cte as (
SELECT FH.BelgeNo AS FaturaNo
,FHD.UrunId
,FH.Tarih
,UG.Grup AS GrupKodu
,FHD.Kodu
,FHD.UrunAdi
,FHD.BirimFiyat
, row_number() over(partition by UG.Grup order by FH.Tarih desc) as rownum
FROM FirmaHareketDetayi FHD
LEFT JOIN FirmaHareketleri FH ON FH.ID = FHD.HareketId
LEFT JOIN Urunler U ON U.UrunId = FHD.UrunId
LEFT JOIN UrunGruplari UG ON UG.GrupId = U.GrupId
WHERE FHD.Kodu = '2S619H307CF'
AND FH.FirmaId = 2610
)
select *
from cte
where rownum = 1

Doğru Sonuç:

Görüldüğü üzere PIERBURG grupkodlu üründen sadece Tarihi en büyük olanın fatura bilgisi geldi.

İyi Kodlar!