Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете всички месеци в рамките на даден период от време, включително тези със стойности 0

Съгласен съм с отговора на Lieven, създайте таблица, съдържаща всички месеци, които някога бихте могли да изисквате, и я използвайте, за да „LEFT JOIN“ към вашата таблица с резултати. Не забравяйте, че това е наистина малка таблица, само 365(ish) реда на година данни, които имате... И можете лесно да напишете някакъв код, който да попълни тази таблица първоначално

Ние правим това тук и това дава много предимства, например, представете си месечна таблица с данни със следните полета (и всякакви други, за които се сетите!), напълно попълнени за всички месеци в даден диапазон;

  • Дата (напр. 2009-04-01)
  • Ден (напр. 1)
  • Ден от седмицата (напр. сряда)
  • Месец (напр. 4)
  • Година (напр. 2009 г.)
  • Финансова година (напр. 2009/10)
  • Финансово тримесечие (напр. 2009Q1)
  • Календарно тримесечие (напр. 2009Q2)

След това комбинирайте това с вашата заявка по-горе, както следва;

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`

Може да има някои грешки в моя SQL код, тъй като не успях да създам тестовите таблици, но се надявам, че ще получите главния и ще го промените според нуждите си!

Използвайки това, можете да промените клаузата си „GROUP BY“ на това, което имате в таблицата „dateTable“, което може да ви позволи лесно да отчитате по финансово тримесечие, месец, ден, ден от седмицата и т.н.

Надявам се това да помогне!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проверете за x последователни дни - дадени времеви печати в базата данни

  2. използвайки (-) тире в името на таблицата на mysql

  3. Използване на MySQL релационни бази данни във Fedora 20

  4. TIMESTAMPDIFF() Примери – MySQL

  5. SQL инжекции в ADOdb и обща сигурност на уебсайта