search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
866 gösterim

İki adet tablo var 1.Tablo 'Kisiler'  - 2.Tablo 'Odemeler'

SQL kullanarak kişiye yapılan son ödemeyi forma yazdırmak istiyorum.

Form üzerinden kişinin detayına girildiği zaman yapılan tüm ödemeler görülmektedir. (Resim-1)

Resim-2'de kişiye yapılan sadece son yardımı görmek istiyorum.  

Veri Tabanı kategorisinde 110 puan

1 cevap

0 oy

Selamlar Mustafa,

Birkaç alt sorgu atman gerekiyor. Sırayla gidelim.

En son kaydı bulmak için 

 
select max(tarih), id from Odemeler group by id

Bunu kişi bazına indirmek istersen odeme kişisini bir parametre ile ataman lazım.

select max(tarih), id from Odemeler where odeme.kisi = #kisi_numarası# group by id

Son ödemenin tarihini ve id bilgisini şu an elde etmiş olmalısın. Bunu kendisi ile join atıp bütün bilgiyi alabilirsin.

select odeme.* from 
   Odemeler odeme
inner join 
    (select max(tarih), id
         from Odemeler 
       where odeme.kisi = #kisi_numarası# 
       group by id) en_son
   on odeme.id = en_son.id

Özetlemek gerekirse. Öncelikle son kaydı bulan sorguyu yazıyorsun. O sorguyu normal sorgunla join yaparak ilk sorgudan aldığın id değeriyle eşlersin.

Eğer programlama dili ile kullanıyorsan iki sorgu çekip daha kolay iş yapabilirsin. 

Mesela 

select * from odemeler where kisi = #XX# order by tarih desc

Bu sorgu sana zaten tarihe göre sıralanmış olarak bir kişiye ait olan ödemeleri getirir. Bunun birinci değerini bi değişkene atarsın. Başka bir sorgu ile atadığın değer üzerinden alabilirsin.

select * from odemeler where id = #XX#

İyi çalışmalar

6.2k puan

İlgili sorular

0 oy
1 cevap 235 gösterim
235 gösterim
Örneğin ödeme tablosunda bulunan; tarih alanındaki "15.02.2020 -15.04.2020" tarihleri arasındaki ödemeleri listelemek istiyorum. Form üzerinde tarih1 ve tarih2 textboxlara tarih girişi yapılacak, sonuç listelenecek. id TCKimlik OdemeTarihi OdemeMiktar 1 22222222222 01.01.2020 100,00 2 44444444444 15.02.2020 150,00 3 66666666666 10.03.2020 500,00 4 88888888888 15.04.2020 700,00
11 Haziran 2020 Veri Tabanı kategorisinde mustappa 110 puan sordu
0 oy
1 cevap 438 gösterim
438 gösterim
Elimde CUSTOMER tablosu var ve bunun için rastgele 20 veriyi nasıl getiririm ?
28 Ocak 2020 Veri Tabanı kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.7K gösterim
1.7K gösterim
Tabloya eklenmiş olan son 5 datanın sadece select ile getirmek istiyorum. Nerede yanlış yapyıorum? select * from table_name where rownum < 5 order by 1 desc
28 Temmuz 2016 Veri Tabanı kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
0 cevap 818 gösterim
818 gösterim
Selamlar, Elimdeki iki tane A ve B diye tablo var. B tablosundaki bir sütunu A tablosundanki bir sütunla güncellemek istiyorum. Bunun için şöyle bir sorgu yaptım; UPDATE identityiq.karsilastirma2 SET email = (SELECT departman FROM identityiq.karsilastirma1 WHERE ... kullanmak istemiyorum. Kullanmadığım takdirde hata veriyor. Herhangi bir şarta bakmadan direk A da ki verileri B ye alabilir miyim?
27 Mayıs 2021 Veri Tabanı kategorisinde kupanintorunu 365 puan sordu
0 oy
1 cevap 782 gösterim
782 gösterim
Alttaki cümleleri join kullanarak nasıl yazabilirim? Select * from Birey b where not exists (select 1 from SınavOgrenci s where s.OgrenciId = b.Id ) Select * from Birey b where Id = (select OgrenciId from SınavOgrenci s where s.Notu=92 )
3 Mayıs 2020 Veri Tabanı kategorisinde Emre 106 puan sordu