Forum
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.
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.
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.
- 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.