Php kod yardımı

Kodla Büyü

realforever

Seçkin Üye
Seçkin Üye
Mesajlar
707
Merhaba arkadaşlar.okulum için geçen sene yapmış olduğum deneme sınav sonuçlarını açıklama sistemini geliştirme adına sayfamda güncelleme yapmak istedim.son 3 deneme sınavında düşüş yasayan öğrencileri tespit etmek icin bir sorgu yaptım .ama sorgu sürekli düşüş yaşayan öğrenciler ile birlikte düşüş sonrada yükseliş yaşayan öğrencileri de buluyor.pho konusunda bilgisi olan arkadaşlar yardımınıza ihtiyacım var.
Sondan 3.sinav> sondan 2.sinav>son sınav şeklinde olan öğrencileri bulmak istediğim kodlamam şu şekilde

SELECT sinifi, numarasi, adisoyadi
FROM (
SELECT
d1.sinifi,
d1.numarasi,
d1.adisoyadi,
d1.LGS AS current,
LAG(d1.LGS, 1) OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS prev1,
LAG(d1.LGS, 2) OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS prev2,
ROW_NUMBER() OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS row_num
FROM tabloadi d1
) subquery
WHERE row_num <= 3
GROUP BY sinifi, numarasi, adisoyadi
HAVING COUNT(*) = 3
AND SUM(CASE WHEN current < prev1 THEN 1 ELSE 0 END) = 2
AND SUM(CASE WHEN prev1 < prev2 THEN 1 ELSE 0 END) = 1
";

Acaba nerde hata yapıyorum
 
Merhaba! SQL sorgunuzda bir mantık hatası var gibi görünüyor. Aşağıdaki sorguyu kullanarak, son üç sınav notunda sürekli düşüş yaşayan öğrencileri tespit edebilirsiniz:SELECT sinifi, numarasi, adisoyadi
FROM (
SELECT
d1.sinifi,
d1.numarasi,
d1.adisoyadi,
d1.LGS AS current,
LAG(d1.LGS, 1) OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS prev1,
LAG(d1.LGS, 2) OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS prev2,
ROW_NUMBER() OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS row_num
FROM tabloadi d1
) subquery
WHERE row_num <= 3
GROUP BY sinifi, numarasi, adisoyadi, current, prev1, prev2
HAVING COUNT(*) = 3
AND current < prev1
AND prev1 < prev2;
Bu sorgu, HAVING kısmında öğrenci notlarının sırasıyla önceki iki sınav notundan düşük olup olmadığını kontrol eder. Bu sayede son üç sınav notunda sürekli düşüş yaşayan öğrencileri bulabilirsiniz.
 
SELECT sinifi, numarasi, adisoyadi
FROM (
SELECT
d1.sinifi,
d1.numarasi,
d1.adisoyadi,
d1.LGS AS current,
LAG(d1.LGS, 1) OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS prev1,
LAG(d1.LGS, 2) OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS prev2,
ROW_NUMBER() OVER (PARTITION BY d1.numarasi ORDER BY d1.sinavtarihi DESC) AS row_num
FROM tabloadi d1
) subquery
WHERE row_num = 1
AND prev1 IS NOT NULL
AND prev2 IS NOT NULL
AND current < prev1
AND prev1 < prev2
GROUP BY sinifi, numarasi, adisoyadi;

Bu şekilde dener misiniz
 
Geri
Üst