Autor | Zpráva | ||
---|---|---|---|
w4c Profil * |
Ahoj,
mám stávající dotaz: SELECT MONTHNAME(Datum), (Max(stavy.Impuls)-Min(stavy.Impuls)) / sds.Konstanta AS Spotreba FROM stavy INNER JOIN sds ON stavy.SdsID = sds.ID WHERE Datum BETWEEN '2022-08-01 00:00' AND '2022-10-31 23:59:59' AND SdsID = 4 GROUP BY YEAR(Datum), MONTH(Datum) výsledek dotazu funguje za předpokladu, že jsou v daném období nějaká data. Potřeboval bych pomoci upravit dotaz tak, aby vracel 0 v případě, že v daném měsíci žádná data nejsou |
||
N71 Profil * |
#2 · Zasláno: 29. 9. 2022, 22:07:28
To nedává moc smysl. Chceš aby databáze agregovala data která neexistují? Tohle bych řešil až na výstupu, jiné postupy jsou prasecké.
|
||
Keeehi Profil |
#3 · Zasláno: 29. 9. 2022, 22:58:51
Když nějaký měsíc neexistuje, protože pro něj nejsou data, samotná databáze o tom nemá ponětí. Tu informaci tam musíš nějak dostat. Musel bys mít vygenerovanou tabulku s měsíci a roky (některé databáze taková data zvládnou lehce generovat i jen za běhu dotazu) a na ní data left joinout. Pak už je přidání 0 pro chybějící záznamy triviální. Použije se IFNULL(), COALESCE(), ISNULL() nebo NVL() v závislosti na databázi (pro MySQL je to první nebo druhá možnost).
|
||
Časová prodleva: 2 roky
|
0