Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Mysql Parçalı Tarih Sorgulama
#1
Mysql ile yaptığım bir tablom var. Bu tabloda yil,ay ve gun1-gun2 ... gun31 diye ayrılan bölümlerim var. Bu tablo içerisinde 
örnek olarak 

gün1 ile gun15 arasındaki verileri nasıl sorgulayabilirim. Herkese Kolay Gelsin. İyi Hafta Sonları Dilerim.
Cevapla
#2
Tablo yapınız ne yapmak istediğiniz çok anlaşılmıyor.
Yıl, ay ve günlere ayrı ayrı fieldmi tanımladınız?
Eğer böyleyse sadece gun1...gun15 arasındaki fieldlerimi filtrelemek istiyorsunuz?
Cevapla
#3
Tablomda id, adsoyad, yil, ay, gun1,gun2 ... gun31 şeklinde kolonlarım mevcut.
Bu kolonlardan benim vereceğim iki tarih arasındaki veriyi çekmek istiyorum. gun1...gun15 diyerek örnekleme yaptım.
Cevapla
#4
Merhaba,
mevcut tablo ile iki tarih arası sorgu çok sıkıntılı olur gibime geliyor.
bence 2. bir tablo ile sorgulama yapmanda fayda var.
id, adsoyad, tarih.
iki tablo arasında trigger ile veri güncellemesi yaparsın.
artık hangi tabloya trigger yazarsın sana kalmış.
Cevapla
#5
(03-06-2019, Saat: 00:05)bkantur Adlı Kullanıcıdan Alıntı: Tablomda id, adsoyad, yil, ay, gun1,gun2 ... gun31 şeklinde kolonlarım mevcut.
Bu kolonlardan benim vereceğim iki tarih arasındaki veriyi çekmek istiyorum. gun1...gun15 diyerek örnekleme yaptım.

Merhaba,

1) Neden böyle bir tasarım yaptığınızı anlayamadım, herhalde mantıklı bir açıklaması vardır. 
2) Tablonuzun DDL Scriptini paylaşabilirmisiniz (Sadece veri tiplerini merak ettiğim için (gun1..gun31'in veri tipi nedir?) )
3) Mevcut durumda aynı tabloya "Tarih" adında fazladan bir sütun daha ekleyip sorgulamalarınızı bu sütunda gerçekleştirebilirsiniz. Böylece mevcut karmaşıklığı dizginlemeniz daha kolay olur...

Misal;
SELECT * FROM TABLONUZ where TARIH BETWEEN '2019-01-01' AND '2019-01-25'
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#6
Tablo yapınız şuna benziyor sanırım. İki aşamalı bir çözüm kullanabilirsiniz.

1. Aşama: Yıl ve Ay a göre istenen tarih aralığı filtrelenir.

lQBM2g.png
 SELECT * from t1 
where yil >= 2018 and ay >= 4 
and yil <= 2019 and ay <= 5 

cümlesi ile aşağıdaki gibi bir sonuç alırısınız.

3O2m85.png
2. Aşama: Veriyi işlediğiniz programlama dilinde, sonuç cümlesindeki satırlardaki günler hanelerini işleyebilirsiniz.

Var olan bir sistemde uğraşıyorsanız  ve tablo yapılarını değiştirmek sıkıntı oluşturacaksa bu şartlar dahilinde bir çözüm aramak mantıklı gelebilir, fakat sistemin daha tasarım aşamasındaysanız bu şekildeki bir tablo yapısı işinizi dahada zorlaştıracaktır.

Mesaj yazarken @uparlayan  beyin cevabı daha yoktu. Aklımdan geçen ve yazmadığım noktaları belirtmiş Smile
Cevapla
#7
@uparlayan , soruyu soran henüz bir cevap yazmamış ama, 1. sorunuza istinaden kuvvetle muhtemel bu bir personel puantaj/bordro veritabanı. Bugüne kadar gördüklerimin hepsi bu şekilde veri saklıyor.
Cevapla
#8
Şöyle bir Öneride bulunayım.
Biraz uğraşmanız gerekebilir.

Buradaki Durumunuz şöyle çözülebilir.
şimdi colonlarınız pivot halinde gitmekte onun için öncelikle unpivot yapmanız gerek

select t.id,
c.col,
case c.col
when 'a' then a
when 'b' then b
when 'c' then c
end as data
from yourtable t
cross join
(
select 'a' as col
union all select 'b'
union all select 'c'
) c

kolon isimlerini bildiğini ve sabit olduğu için sadece
union all yerlerine kolon isimlerini yazarak öncelikle yatayda olan veriyi dikey şekilde çekiniz

MySql de Temp table varmı biliyorum varsa

select t.id,
c.col,
case c.col
when 'a' then a
when 'b' then b
when 'c' then c
end as data
from yourtable t
cross join
(
select 'a' as col
union all select 'b'
union all select 'c'
) c

from yourtable yerinden önceye INTO #TEMP yazarak sanalda bir tabloya atınız Eğer temp yoksa
CTE kullanın o da yoksa Fizksel olarak bir tabloya atın
tabloya attıktan sonra bu kez sizin
gun1 gun2 olarak gelecek kolonlarınız bu kez
gun1
gun2
gun3 olarak gelecektir tabiki yıllarda o şekilde

yani Select * from #temp yazdığınız zaman
ID ADI YIL GUNLER
1 deneme 2019 gun1

Şeklinde gelecektir bundan sonra

select * from #temp where GUN between gun1 and gun30 diyerek çekmiş olursunuz
Smile Wink
İnşallah anlatabilmişimdir Smile

Unutmadan Temp tabloda olsa fiziksel bir tabloda olsa

select cümlenizin en başına
Drop Table #temp yada fiziksel tablo adını yazmanız gerekir.
Bunun sonrasında yine yatayda görmek istiyorum diyorsan

yazdığın ve kısıtladığın yanı betweenlediğin tabloyu yeniden pivot olarak yan yana yazdırman gerekir Wink
Cevapla
#9
merhabalar, konu çok eski ama net bir cevap yazılmamış benim de bu konuda yardıma ihtiyacım var, personel izinlerini takip ettiğim bir tablom var izinbaşlangıç ve izin bitişlerini sakladığım bir tablo 
sorgulama yaparken başlangıç tarihi ile bitiş tarihi arasındaki verileri listelemek istediğimde 
 select * from personelhareket where TC=:tc and BASLAMATARIH>=:t1 and BITISTARIH<=:t2 and BASLAMASAAT>=:s1 and BITISSAAT<=:s2
bu şekilde sorgulama yapmak istiyorum fakat sonuç sıfır dönüyor sorun neden kaynaklanıyor
Cevapla
#10
(20-12-2022, Saat: 13:20)cvheneburi Adlı Kullanıcıdan Alıntı: merhabalar, konu çok eski ama net bir cevap yazılmamış benim de bu konuda yardıma ihtiyacım var, personel izinlerini takip ettiğim bir tablom var izinbaşlangıç ve izin bitişlerini sakladığım bir tablo 
sorgulama yaparken başlangıç tarihi ile bitiş tarihi arasındaki verileri listelemek istediğimde 
 select * from personelhareket where TC=:tc and BASLAMATARIH>=:t1 and BITISTARIH<=:t2 and BASLAMASAAT>=:s1 and BITISSAAT<=:s2
bu şekilde sorgulama yapmak istiyorum fakat sonuç sıfır dönüyor sorun neden kaynaklanıyor

kod bloğunu, ve data resmini atabilir misin.
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Tarih Guncelleme Trigger OZCANK 2 624 24-05-2023, Saat: 17:06
Son Yorum: OZCANK
  İki Tarih Arası Sorgulama Mikdad 19 2.200 23-05-2023, Saat: 08:24
Son Yorum: Mikdad
  WebBrowser ile Forma Veri Gönderme ve Sorgulama adnansirca 5 2.310 02-03-2023, Saat: 17:15
Son Yorum: adnansirca
  Mysql Büyükten Küçüğe Sıralama Sorunu hakanharbeli 8 4.670 26-01-2023, Saat: 10:35
Son Yorum: yhackup
  son kayitdaki tarih bilgisini almak sadikacar60 11 2.135 16-01-2023, Saat: 19:04
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi