sql >> Databasteknik >  >> RDS >> Mysql

Välj alla månader inom ett visst datumintervall, inklusive de med 0-värden

Jag håller med Lievens svar skapa en tabell som innehåller alla månader du någonsin kan behöva, och använd den för att "LEFT JOIN" till din resultattabell. Kom ihåg att det här är en väldigt liten tabell, bara 365 (ish) rader per år med data du har... Och du kan enkelt skriva lite kod för att fylla den här tabellen initialt

Vi gör detta här, och det ger massor av fördelar, till exempel, föreställ dig en månatlig datatabell med följande fält (och alla andra du kan tänka dig!) fullt ifyllda för alla månader i ett givet intervall;

  • Datum (t.ex. 2009-04-01)
  • Dag (t.ex. 1)
  • Veckodag (t.ex. onsdag)
  • Månad (t.ex. 4)
  • År (t.ex. 2009)
  • Räkenskapsår (t.ex. 2009/10)
  • Finansiellt kvartal (t.ex. 2009Q1)
  • Kalenderkvartal (t.ex. 2009 Q2)

Kombinera sedan detta med din fråga ovan, enligt följande;

SELECT `DT`.`myYear`, `DT`.`myMonth`, 
           AVG(`myTable`.`value1`) as avg_value_1, 
           AVG(`myTable`.`value2`) as avg_value_2

FROM `dateTable` as DT
LEFT JOIN `myTable`
    ON `dateTable`.`myDate` = `myTable`.`save_date`

WHERE `dateTable`.`myDate` BETWEEN '2009-01-01' AND '2009-07-01'

GROUP BY `DT`.`myYear`, `DT`.`myMonth`

Det kan finnas några fel i min SQL-kod eftersom jag inte har kunnat skapa testtabellerna, men förhoppningsvis får du huvuden och ändringen för att passa dina behov!

Genom att använda detta kan du ändra din "GROUP BY"-klausul till vad du har i tabellen "dateTable", vilket gör att du enkelt kan rapportera efter finansiellt kvartal, månad, dag, veckodag, etc.

Hoppas det hjälper!



  1. SQL Alias ​​förklarat

  2. SQL Server:Hur får man främmande nyckelreferens från information_schema?

  3. SQL Server 2012 Service Pack 1 och kumulativ uppdatering 1

  4. Hur använder jag PostgreSQL JSON(B)-operatorer som innehåller ett frågetecken? via JDBC