Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: tunayk - 16 Mart 2021, 18:34:33

Başlık: SQL Sorgusu yardım
Gönderen: tunayk - 16 Mart 2021, 18:34:33
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?


Başlık: Ynt: SQL Sorgusu yardım
Gönderen: mufitsozen - 16 Mart 2021, 19:21:07
DB SCHEMAyi gorelim.
Başlık: Ynt: SQL Sorgusu yardım
Gönderen: tunayk - 16 Mart 2021, 19:38:20
Pc den uzaktayım şu an. Ancak tablolar arasında hiç bir ilişki yok.  Her tablo bağımsız.
Başlık: Ynt: SQL Sorgusu yardım
Gönderen: fide - 16 Mart 2021, 21:18:39
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.
Başlık: Ynt: SQL Sorgusu yardım
Gönderen: mufitsozen - 16 Mart 2021, 21:29:21
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?
Başlık: Ynt: SQL Sorgusu yardım
Gönderen: 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.
Başlık: Ynt: SQL Sorgusu yardım
Gönderen: tunayk - 16 Mart 2021, 22:11:18
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.
Başlık: Ynt: SQL Sorgusu yardım
Gönderen: mufitsozen - 16 Mart 2021, 22:26:15
SQL Joins (https://images.app.goo.gl/wiw1H8Fi8R2y3HF36)

Yukardaki tablodan ilgilendiginiz set islemini seciniz.
Başlık: Ynt: SQL Sorgusu yardım
Gönderen: brandice5 - 17 Mart 2021, 10:28:02
"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;
Başlık: Ynt: SQL Sorgusu yardım
Gönderen: tunayk - 17 Mart 2021, 23:08:22
Ç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ı.