sql >> Database >  >> RDS >> Mysql

geeft nullen terug voor datums die niet bestaan ​​MYSQL GROUP BY

Meestal bereik je dit soort dingen door mee te doen met een waardetabel , d.w.z. een tabel die alle waarden bevat waarin u geïnteresseerd bent.

Typische waardetabellen kunnen bijvoorbeeld alle gehele waarden tussen 0 en 1.000 bevatten, of alle datums voor een bepaalde periode. Vaak bevatten de Value-tabellen meer waarden dan gewenst, en we verkrijgen de exacte gewenste output door filters toe te voegen in de WHERE-component.

In dit geval heeft u zo'n tabel nodig die datums bevat. Ervan uitgaande dat deze tabel ValTableDates heet en alle datums tussen januari 2005 en december 2010 bevat, ziet de query er als volgt uit:

SELECT AVG(data) AS data, VT.ValDate
FROM ValTableDates VT
LEFT JOIN  table T ON T.dateReg = VT.ValDate
WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg) 
ORDER BY dateReg

De bovenstaande query vereist misschien wat aanpassingen om de waarde Nul in plaats van NULL te krijgen, maar het belangrijkste punt is dat de Waardetabel doorgaans de eenvoudigste manier is om uitvoerrecords te leveren voor ontbrekende gegevenspunten.
Een alternatief is om te gebruiken een functie/expressie die de gewenste [datum]-reeks binnen een subquery produceert, maar dit is over het algemeen minder efficiënt en foutgevoeliger.




  1. Instellen en identificeren van rijdoelen in uitvoeringsplannen

  2. Een datatabel invullen in C# met MySQL

  3. MySQL Geneste Select Query?

  4. Wat is de SQL-specifieke programmeertaalnaam van MySQL?