Merhaba,
Bu yazımızda bir tabloda bulunan tekrar eden kayıtlar arasından her bir tekrar eden kaydın en güncel olan satırını elde edeceğiz.
Öncelikle tekrar eden kayıtların bulunduğu Products tablosu aşağıdaki gibidir.

Products
Bu tabloda Computer ve Mobile Phone ürünleri tekrar etmektedir. Burada tekrar eden kayıtları teke düşürmek için aşağıdaki gibi bir group by kullanımı yapılabilir.

Group By
Bu sorgu ile tekrar eden kayıtları teke düşürmüş olduk ama tablodaki diğer alanlara erişemedik. Group by kullanımında diğer alanlara erişmek için diğer alanlar için aggregate functionlardan yararlanmalıyız. Mesela quantity alanını almak istiyorsak MAX(quantity) dememiz gerekir. Yine diğer alanlar içinde buna benzer bir kullanım yapmak zorundayız ama bizim aggregate function kullanma gibi bir ihtiyacımız olmayabilir. Yani biz tekrar eden kayıtlar arasından sadece son eklenen kaydı tüm alanlarını aggregate function kullanmadan yalın haliyle almak isteyebiliriz. Bunun için aşağıdaki gibi bir sorgu çalıştırmamız gerekecektir.

ROW_NUMBER
Burada yapılan işlemi özetlemek gerekirse Products tablosunu name alanına göre gruplayıp bu kayıtları create_date alanına göre sıralıyoruz. ROW_NUMBER() ile her bir satıra bir sıra numarası veriyoruz. Örneğin bizim tablomuzda 3 adet Computer isimli kayıt vardı. Bunları tarihe göre sıraladığımızda en güncel kaydın sıra numarası 1 sonraki güncel kaydın sıra numarası 2 en eski Computer kaydının sıra numarası ise 3 olmaktadır.
Tekrar eden kayıtlar arasından en güncelini almak istediğimizde ise bizim en güncel kaydımızın sıra numarası 1 olduğu için sıra numara değeri 1 olan kayıtları çektiğimizde istediğimiz sonucu elde etmiş olmaktayız.

ROW_NUMBER
İşte bu sorgu ile tabloda tekrar eden kayıtlar arasından en güncelini tüm alanları ile başarılı bir şekilde elde etmiş olduk.
İyi çalışmalar.