MS Sql birden çok kayıt arasında son tarihli veya ilk tarihli kaydın bulunması
23.175 defa okundu
Konu: Raporlama
İçindekiler
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.
SQL
- 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.
SQL
- 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ı
SQL
- 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ı
SQL
- 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
Teşekkürler, geri bildiriminiz alındı.