SQL Sorgusu yardım

Başlatan tunayk, 16 Mart 2021, 18:34:33

tunayk

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?



mufitsozen

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

tunayk

Pc den uzaktayım şu an. Ancak tablolar arasında hiç bir ilişki yok.  Her tablo bağımsız.

fide

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.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

mufitsozen

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?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

forsa1975

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.

tunayk

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:15
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.

Eyvallah hocam. Lakin bu sorgu tarihleri eşleşmeyenleri getirmiyor. Zaten benim asıl derdim onlar.

mufitsozen

#7
SQL Joins

Yukardaki tablodan ilgilendiginiz set islemini seciniz.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

brandice5

#8
"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;

tunayk

Ç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ı.