Aşağıda daha önce karşılaştığım bir problem ile ilgili sorum ve çözüm yolları:
Sorum:
‘kullanıcı_bilgileri’ adlı tablonun içeriği aşağıdaki gibidir;
kul_adi kul_termid kul_tarih
——- ———- ————
abulut abc8 03-04-2007
abulut abe5 08-07-2008
abulut abk2 06-05-2008
hsezen dhk1 12-02-2005
hsezen ddk6 10-08-2006

bu tablo kullanılarak yapılacak sorgu sonucu aşağıdaki gibi her kullanıcının en son hangi tarihte hangi terminal id’si ile giriş yaptığı satırın çıkması gerekiyor;

kul_adi kul_termid kul_tarih
———- ———- ———-
abulut abe5 08-07-2008
hsezen ddk6 10-08-2006
… .. ..
şeklinde olması lazım.Nasıl bir sorgu yazmam gerekiyor?

SELECT KUL_ADI,KUL_TERMID,MAX(KUL_TARIH)AS SON_TARIH FROM KULLANICI_BILGILERI GROUP BY KUL_ADI,KUL_TERMIDORDER BY KUL_ADI
gibi bi sorgu yaptım ancak farklı terminal id’ler olduğundan onlara göre gruplama yapıyor ve biçok satır çıkıyor…

Çözüm Yolları:
——————-1.yol

Select * from (
SELECT KUL_ADI,KUL_TERMID,KUL_TARIH ,dense_rank() over(partition by kul_adi order by kul_tarih desc) sira
FROM KULLANICI_BILGILERI
) where sira=1

——————–2.yol

select k.* from KULLANICI_BILGILERI k,
(select k1.kul_adi, max(k1.kul_tarih) kul_tarih from KULLANICI_BILGILERI k1 group by k1.kul_adi) t
where k.kul_adi=t.kul_adi and k.kul_tarih=t.kul_tarih

——————-3.yol

select a.* from KULLANICI_BILGILERI a
where a.kul_tarih = (select max(kul_tarih) from KULLANICI_BILGILERI b where b.kul_adi = a.kul_adi)