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 *
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
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).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0