5 farklı noktanın sıcaklık değerlerinin kaydedildiği 5 ayrı tablo var.(Tablolarda her hangi bir revizyon yapmam mümkün değil. sadece sorgu yapabiliyorum) Her tabloda tarih ve değer isimli iki kolon var. Tarihler genel olarak eşit, ancak arada eşit olmayanlar da var. Aslında tarihe göre gruplama yapıp, eşleşmeyen tarihlerde degerleri null görsem de olur.
Şimdi bu tablolardan tek bir sorguda, tarihe göre azalan şekilde;
tarih, deger1,deger2,deger3,deger4,deger5 şeklinde bir sorgu almak istiyorum.
nasıl bir sorgu kullanmalıyım?
DB SCHEMAyi gorelim.
Pc den uzaktayım şu an. Ancak tablolar arasında hiç bir ilişki yok. Her tablo bağımsız.
View oluşturarak çözülebilir gibi görünüyor. Önce tüm tablo değerlerini geçici bir tabloya(view) aktarıp onun üzerinde sorgu /order yapılabilir.
Alıntı yapılan: tunayk - 16 Mart 2021, 19:38:20Ancak tablolar arasında hiç bir ilişki yok. Her tablo bağımsız.
Anladim.
DB SCHEMA nerede?
SELECT tablo1.deger,tablo2.deger,tablo3.deger,tablo4.deger,tablo5.deger, FROM tablo1
INNER JOIN tablo2 ON tablo1.tarih = tablo2.tarih
INNER JOIN tablo3 ON tablo2.tarih = tablo3.tarih
INNER JOIN tablo4 ON tablo3.tarih = tablo4.tarih
INNER JOIN tablo5 ON tablo4.tarih = tablo5.tarih
WHERE tablo1.tarih=#16/03/2021# order by tablo1.tarih desc
Tablolar aynı database dosyası içinde ise bu günkü kayıtları listelemesi lazım.
Alıntı yapılan: mufitsozen - 16 Mart 2021, 21:29:21Anladim.
DB SCHEMA nerede?
Alıntı yapılan: tunayk - 16 Mart 2021, 19:38:20Pc den uzaktayım şu an.
Demiştim. :)
Alıntı yapılan: forsa1975 - 16 Mart 2021, 21:54:15SELECT tablo1.deger,tablo2.deger,tablo3.deger,tablo4.deger,tablo5.deger, FROM tablo1
INNER JOIN tablo2 ON tablo1.tarih = tablo2.tarih
INNER JOIN tablo3 ON tablo2.tarih = tablo3.tarih
INNER JOIN tablo4 ON tablo3.tarih = tablo4.tarih
INNER JOIN tablo5 ON tablo4.tarih = tablo5.tarih
WHERE tablo1.tarih=#16/03/2021# order by tablo1.tarih desc
Tablolar aynı database dosyası içinde ise bu günkü kayıtları listelemesi lazım.
Eyvallah hocam. Lakin bu sorgu tarihleri eşleşmeyenleri getirmiyor. Zaten benim asıl derdim onlar.
SQL Joins (https://images.app.goo.gl/wiw1H8Fi8R2y3HF36)
Yukardaki tablodan ilgilendiginiz set islemini seciniz.
"left outer join" veya "full outer join" kullanmanız lazım.
SELECT tablo1.deger,tablo2.deger,tablo3.deger,tablo4.deger,tablo5.deger FROM tablo1
full outer JOIN tablo2 ON tablo1.tarih = tablo2.tarih
full outer JOIN tablo3 ON tablo2.tarih = tablo3.tarih
full outer JOIN tablo4 ON tablo3.tarih = tablo4.tarih
full outer JOIN tablo5 ON tablo4.tarih = tablo5.tarih;
Çeşitli joinler denedim ama açıkçası pek mutlu etmedi. full outer join işlem süresi çok uzun sürüyor.
Verileri incelediğimde asıl sorunlu olan konu, data logger kayıt alırken bazı kanalları, 1sn geç kaydediyor bu nedenle de tarih eşleşmiyor. Sıklık zaten 1dk olduğu için şöyle bir çözüm buldum. Belki sizlerin de işine yarayabilir.
where a.log_date>=@bas and a.log_date<@bit and
CAST(a.log_date AS smalldatetime)=CAST(b.log_date AS smalldatetime) and
CAST(a.log_date AS smalldatetime)=CAST(c.log_date AS smalldatetime)
kısaca tarih eşlemesini saniye ve milisaniye kısmını atıp yapınca, 1dk aralıkta herkes yerli yerine oturdu ve gayet hızlı çalıştı.