SQL Veri çekme sorusu

kravuzen

Hectopat
Katılım
14 Ocak 2020
Mesajlar
1.032
Merhabalar. Mutlaka SQL bilenler vardır diye düşündüm. Birçok kolona sahip bir tablodan veri çekmek istiyorum fakat şöyle bir şeye ihtiyacım var,

Kolon 1, 2, 3'ü aynı olan, Kolon 4'ü farklı olan çıktıların tek bir çıktı olarak gelmesini istiyorum. Kolon 4'te farklı girdiler olduğu için birçok farklı satırda çıktılar alıyorum ama dediğim gibi birkaç kolonu aynı olanları tek satırda çıkarmanın bir yolu var mıdır sormak istedim. Teşekkürler.
 
Son düzenleyen: Moderatör:
Select Kolon4, Kolon1, Kolon2, Kolon3
From ilgili_Tablo
Where (Kolon1 = Kolon2) && (Kolon2 = Kolon3) && (Kolon1 = Kolon3) && (Kolon1 <> Kolon4)
Group by Kolon4;
 
Select Kolon4, Kolon1, Kolon2, Kolon3
From ilgili_Tablo
Where (Kolon1 = Kolon2) && (Kolon2 = Kolon3) && (Kolon1 = Kolon3) && (Kolon1 <> Kolon4)
Group by Kolon4;
Yanıtın için sağol hocam ama tam entegre edemedim. Teyit etmek için tekrar örnek bir çıktı vermiş olayım,

Ahmet - Mehmet - 15 - Kırmızı
Ahmet - Mehmet - 15 - Mavi
Ahmet - Mehmet - 15 - Sarı

Şeklinde örnek girdiler var ve bu 4 kolon haricinde de birkaç kolon daha var. Benim yapmak istediğim şey ise listeleme yaparken Ahmet - Mehmet - 15 olanları bir şekilde tek satırda göstermek.
 
Group By kolon1,kolon2,kolon3 yapıp tekrar deneyin.
Sorun çözüldü mü ?
Henüz başaramadım ama arkadaşa deneteceğim hocam çözümü :D Olmadı tekrar yazarım teşekkürler.
Group By kolon1,kolon2,kolon3 yapıp tekrar deneyin.
Sorun çözüldü mü ?
Hocam bir sorum daha olacaktı size, umarım anlatabilirim. Mesela sistemde çeşitli şehirler var, bir araç A noktasından B noktasına, oradan C oradan da D noktasına gitmiş olsun. Hepsinin kaydı da veri olarak eklenmiş durumda yani aracın A'da olduğu durumun, aracın B'de olduğu durum, aracın C'de olduğu durum ve aracın D'de olduğu durumun kayıtları var. Ben sadece aracın güncel durumda, yani en son durakta olduğu durumu nasıl çekebilirim? Eğer açıklayamadıysam başka bir örnek de verebilirim.
 
Son düzenleme:
Açıkladığınız veriye göre arabanın en son konumu en son güncellenen tablo verisi olacak. Hangi sql'u kullandığınızı bilmediğim için SQL Server örneği üzerinden göstermem gerekirse:

SQL:
SELECT A,B,C,D,[modify_date] FROM sys.tables

Şöyle bir kaynak daha var:
 
Açıkladığınız veriye göre arabanın en son konumu en son güncellenen tablo verisi olacak. Hangi sql'u kullandığınızı bilmediğim için SQL Server örneği üzerinden göstermem gerekirse:

SQL:
SELECT A,B,C,D,[modify_date] FROM sys.tables

Şöyle bir kaynak daha var:

Hocam selamlar çok sağol yardımların için önceki kodu halletmiş oldum. Bir şey için daha danışmak istedim. Tablo yapısı şu şekilde olan bir örnek var.

Tarih ------ Sınıf -----İsim
01/02/2021------A ------X
10/02/2021------B-------X
15/02/2021------C ------X​

Aşağıdaki kod ile en son güncelleme yapıldığı yeri, yani 3. satırdaki sınıf bilgisini çekebiliyorum. Ben bu yapıda X kişisinin ilk tarihteki sınıfı A iken, son durumda yine A ise o satırı çekmek istemiyorum. Yani X kişisinin sınıfı A -> B -> C -> A olduğunda Sınıf bilgisi çekilmesin, A -> B -> A -> C olduğunda sınıfı C olarak çekilsin istiyorum. Bu tarihin minimum olduğundaki ile max. olduğundaki sınıf bilgisinin kıyaslanıp verinin ona göre çekilip çekilmemesini koşulunu nasıl ekleyebilirim? Teşekkür ederim.

SQL:
SELECT sınıf FROM demo
WHERE tarih IN
(SELECT max(tarih) FROM demo WHERE isim='X');

Aynı şekilde bu kod ile de en güncel satırı çekebiliyorum.

Kod:
SELECT * FROM demo WHERE demo.tarih = (SELECT MAX(tarih) FROM demo)
 
Son düzenleme:
Doğru anladıysam sınıfında değişiklik yapılmayan kayıtlar dönmesin istiyorsunuz sanırım. Mesele buysa DISTINCT ve NOT IN anahtar kelimeleriyle yapılabilir.

SQL:
SELECT *
FROM demo
WHERE demo.tarih = (SELECT MAX(tarih) FROM demo)
AND
(Select sınıf From demo Where demo.tarih = max(tarih) <> (Select sınıf FROM demo Where demo.tarih = min(tarih)

Çalışıp çalışmayacağından emin değilim ama max tarih üzerindeki sınıf bilgisiyle minimum yani en küçük olan tarihin üzerindeki sınıf bilgisi eşit olmamalı istediğiniz döngüyü yakalayabilmeniz için.
 
Doğru anladıysam sınıfında değişiklik yapılmayan kayıtlar dönmesin istiyorsunuz sanırım. Mesele buysa DISTINCT ve NOT IN anahtar kelimeleriyle yapılabilir.

SQL:
SELECT *
FROM demo
WHERE demo.tarih = (SELECT MAX(tarih) FROM demo)
AND
(Select sınıf From demo Where demo.tarih = max(tarih) <> (Select sınıf FROM demo Where demo.tarih = min(tarih)

Çalışıp çalışmayacağından emin değilim ama max tarih üzerindeki sınıf bilgisiyle minimum yani en küçük olan tarihin üzerindeki sınıf bilgisi eşit olmamalı istediğiniz döngüyü yakalayabilmeniz için.

Yanıtın için tekrardan sağol hocam. DISTINCT ve NOT IN anahtar kelimelerinin burada nasıl kullanılabileceğini bilmiyorum ama evet dediğiniz gibi ilk ve son durumda aynı sınıf değerine sahip ise o kayıt dönmesin istiyorum. Aslında ben AND koşulu ekleyip deneyip başaramadım, belki CASE yapısıyla olabilir demiştim.

Örnek kod bloğunuzdaki kodun son kısmındaki SELECT bölümlerinin parantezlerini kapatıp çalıştırdığımda " misuse of aggregate function MAX() " şeklinde bir hata alıyorum, sanırım bu max-min fonksiyonlarının bu sorguda kullanımında bir problem var.
 
SQL:
SELECT *
FROM demo
WHERE demo.tarih = (SELECT MAX(tarih) FROM demo)
AND
(Select sınıf From demo Where demo.tarih = max(tarih)) <> (Select sınıf FROM demo Where demo.tarih = min(tarih))

Sub-query'nin parantezlerini unutmuşum tekrar deneyebilirsiniz.
 

Yeni konular

Geri
Yukarı