Forum

Sql sorgusu hakkınd...
 
Bildirimler
Hepsini Temizle

Sql sorgusu hakkında

4 Yazılar
1 Üyeler
0 Reactions
722 Görüntüleme
(@TayfunKOC)
Gönderiler: 169
Reputable Member
Konu başlatıcı
 

Merhabalar,

 

Aşağıda ki gibi bir tablom mevcut.Bu tablo bir sorgu sonucunda oluşuyor.

 

KayitId KayitAdi KayitBasvuruNo KayitOlusturulmaTarihi KayitTipi
1 Kayit1 3 10.4.2016 10:23 4
2 Kayit2 3 12.4.2016 10:23 5
3 Kayit3 3 16.4.2016 10:23 5
4 Kayit4 21 1.4.2016 10:23 5
5 Kayit5 32 30.4.2016 10:23 5
6 Kayit6 53 20.4.2016 10:23 6
7 Kayit7 43 10.4.2016 10:23 4
8 Kayit8 23 14.3.2016 10:23 2
9 Kayit9 65 14.2.2016 10:23 3

 

Yapmak istediğim şu;

 

Kayit tipi 4 olup aynı kayıt basvurusuna sahip kayıt tipi 5 olan kayıtları almak istiyorum.Ancak bu sorguyu tarih filtresine göre çalıştırmam gerekyor ve bu filtre sadece kayıt tipi 4 olan kayıtlar için geçerli olmalı.

 

Yani kullanıcı Başlangıç Tarihi : 10.4.2016  Bitiş Tarihi :11.4.2016 seçtiğinde ekranda kayıt tipi 4 üzerinden bu kayda kayıt başvuru no ile bağlı ve kayıt tipi 5 olan  kayıtlar da gelmeli.Bu kayıtlar her hangi bir filtreye takılmamalı.Filtreleme işlemi sadece kayıt tipi 4 olan kayıt için geçerli.Ayrıca ekrana kayıt tipi 4 olup aynı kayıt basvuru nosuna sahip kayıt tipi 5 olan kaydı olmayan kayıtlar gelmemeli.Umarım anlatabilmişimdir.Biraz kompleks geldi bana ve sabahtan beridir uğraşıyorum ancak içinden  çıkamadım.

Not: Performans nedeni ile union kullanmak istemiyorum.Aynı tabloyu left join ile tekrar çektiğimde de satır sayısı beklediğim gibi geliyor ama içerik hep kayıt tipi 4 olan kaydın içeriği oluyor.Kayıt çokluyormuş gibi görünüyor.

 

Yardımlarınız için şimdiden teşekkür ederim.

 
Gönderildi : 19/04/2016 17:55

(@TayfunKOC)
Gönderiler: 169
Reputable Member
Konu başlatıcı
 

Tayfun Merhaba

Case when then ile denedin mi?

 

Hocam selamlar,

 

Case when ile nasıl yapacağımı anlamadım.Ama where koşulunda denediğimde syntax hatası alıyorum.Yani 

case kayittipi  when 4 then kayittarihi between ' tarihbaslangic' and 'tarihbitis ' gibi bir şey denedim ama olmadı.Koşul sağlandığında bu koşul çalışsın gibi bir şey yapamıyorum.

 
Gönderildi : 20/04/2016 11:07

(@TayfunKOC)
Gönderiler: 169
Reputable Member
Konu başlatıcı
 

Merhabalar,

 

Çözüm ;

 

select * from kayit k

where k.kayittipi  in (4,5) and 

k.KayitBasvuruNo in ( select k2.KayitBasvuruNo from kayit k2 where k2.KayitOlusturulmaTarihi and k2.HayitTipi = 4

and (select count(*) from kayit k3 where k3.KayitBasvuruNo=k2.KayitBasvuruNo and k3.type_id=5) > 0)

 

İyi Çalışmalar.

 
Gönderildi : 20/04/2016 13:50

(@TayfunKOC)
Gönderiler: 169
Reputable Member
Konu başlatıcı
 
  • Hocam selamlar,

Kayıt sayısı çok fazla tabloda. kaydı azaltan en önemli faktör tarih parametresi.Çok büyük bir performans kaybım yok.Tabi sorgumda sadece bu filtrelerde yok.Başka filtreler ve diğer selectlerde mevcut.Canlı sunucuda 3dk filan sürüyor 🙂 1 aylık liste çekiyorum.

 

 

 
Gönderildi : 20/04/2016 15:40

Paylaş: