MS Sql birden çok kayıt arasında son tarihli veya ilk tarihli kaydın bulunması

MS Sql birden çok kayıt arasında son tarihli veya ilk tarihli kaydın bulunması

MS SQL ile aynı kişi veya ID ye ait birden çok satırlı kayıtlarda son kayıt tarihi veya ilk kayıt tarihine ulaşmak bazı durumlarda çok önemlidir.

İlk kayıt için MIN(TARIH) ifadesi, son kayıt için MIN(TARIH) ifadesini kullanmalıyız.

Öncelikle bu konu için aşağıdaki sorgu ile GECICI_TABLO isminde bir tablo oluşturabiliriz. 

SELECT 1 AS ID,'AHMET1' AS ADI,'DENEME1' AS SOYADI,'10.02.1982' AS TARIH 
INTO #GECICI_TABLO
UNION
SELECT 1 AS ID, 'AHMET1' AS ADI,'DENEME1' AS SOYADI,'21.05.2014' AS TARIH UNION
SELECT 1 AS ID, 'AHMET1' AS ADI,'DENEME1' AS SOYADI,'28.04.2014' AS TARIH UNION
SELECT 4 AS ID,'AHMET4' AS ADI,'DENEME4' AS SOYADI,'12.01.2014' AS TARIH UNION
SELECT 4 AS ID,'AHMET4' AS ADI,'DENEME4' AS SOYADI,'18.06.2014' AS TARIH UNION
SELECT 4 AS ID,'AHMET4' AS ADI,'DENEME4' AS SOYADI,'13.03.2014' AS TARIH UNION
SELECT 2 AS ID,'AHMET2' AS ADI,'DENEME2' AS SOYADI,'05.07.2014' AS TARIH UNION
SELECT 2 AS ID,'AHMET2' AS ADI,'DENEME2' AS SOYADI,'30.07.2014' AS TARIH UNION
SELECT 2 AS ID,'AHMET2' AS ADI,'DENEME2' AS SOYADI,'17.04.2014' AS TARIH UNION
SELECT 2 AS ID,'AHMET2' AS ADI,'DENEME2' AS SOYADI,'10.06.2014' AS TARIH UNION
SELECT 5 AS ID,'AHMET5' AS ADI,'DENEME5' AS SOYADI,'12.08.2014' AS TARIH UNION
SELECT 5 AS ID,'AHMET5' AS ADI,'DENEME5' AS SOYADI,'20.08.2014' AS TARIH UNION
SELECT 3 AS ID,'AHMET3' AS ADI,'DENEME3' AS SOYADI,'08.01.2014' AS TARIH UNION
SELECT 3 AS ID,'AHMET3' AS ADI,'DENEME3' AS SOYADI,'25.08.2014' AS TARIH UNION
SELECT 3 AS ID,'AHMET3' AS ADI,'DENEME3' AS SOYADI,'11.06.2014' AS TARIH 

Oluşturduğumuz geçici tablomuzun içeriği aşağıdaki gibidir.

SELECT * FROM #GECICI_TABLO

ID ADI SOYADI TARIH
1 AHMET1 DENEME1 21.05.2014
1 AHMET1 DENEME1 28.04.2014
2 AHMET2 DENEME2 05.07.2014
2 AHMET2 DENEME2 10.06.2014
2 AHMET2 DENEME2 17.04.2014
2 AHMET2 DENEME2 30.07.2014
3 AHMET3 DENEME3 08.01.2014
3 AHMET3 DENEME3 11.06.2014
3 AHMET3 DENEME3 25.08.2014
4 AHMET4 DENEME4 12.01.2014
4 AHMET4 DENEME4 13.03.2014
4 AHMET4 DENEME4 18.06.2014
5 AHMET5 DENEME5 12.08.2014
5 AHMET5 DENEME5 20.08.2014

Tarih alanına göre aynı Id ye ait en büyük tarihili kayıtın bulunması

SELECT ID,ADI,SOYADI,TARIH
FROM #GECICI_TABLO
WHERE TARIH=(SELECT MAX(TARIH) FROM #GECICI_TABLO AS T1 WHERE T1.ID=#GECICI_TABLO.ID)
ORDER BY ID 

Sonuç 

ID ADI SOYADI TARIH
1 AHMET1 DENEME1 28.04.2014
2 AHMET2 DENEME2 30.07.2014
3 AHMET3 DENEME3 25.08.2014
4 AHMET4 DENEME4 18.06.2014

Tarih alanına göre aynı Id ye ait en küçük tarihili kayıtın bulunması

SELECT ID,ADI,SOYADI,TARIH
FROM #GECICI_TABLO 
WHERE TARIH=(SELECT MIN(TARIH) FROM #GECICI_TABLO AS T1 WHERE T1.ID=#GECICI_TABLO.ID)
ORDER BY ID 


İlgili Yazılar