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

Общо текущо за периода от време – попълнете липсващите дати

За да се погрижите за липсващите месеци, създайте шаблонна таблица, към която да се присъедините.

Мислете за това като за кеширане. Вместо да преглеждате и попълвате празнини, просто имайте кеширан календар във вашата база данни.

Можете дори да комбинирате множество календари (начало на месеца, начало на седмицата, празници, работен ден и т.н.) всички в една таблица, с куп флагове и индекси за търсене.

В крайна сметка получавате нещо като...

SELECT
  calendar.date,
  SUM(data.amt)
FROM
  calendar
LEFT JOIN
  data
    ON  data.date >= calendar.date
    AND data.date <  calendar.date + INTERVAL 1 MONTH
WHERE
      calendar.date >= '20110101'
  AND calendar.date <  '20120101'
GROUP BY
  calendar.date

РЕДАКТИРАНЕ

Току-що забелязах, че ОП иска текуща сума.

Това е възможно в SQL, но е изключително неефикасен. Причината е, че резултатът от един месец не се използва за изчисляване на следващия месец. Вместо това цялата текуща сума трябва да се изчисли отново.

Поради тази причина обикновено силно се препоръчва да изчислите месечната обща сума, както е посочено по-горе, след което да използвате приложението си, за да преглеждате и правите текущите общи стойности.

Ако наистина трябва да го направя в SQL, би било нещо като...

SELECT
  calendar.date,
  SUM(data.amt)
FROM
  calendar
LEFT JOIN
  data
    ON  data.date >= @yourFirstDate
    AND data.date <  calendar.date + INTERVAL 1 MONTH
WHERE
      calendar.date >= @yourFirstDate
  AND calendar.date <  @yourLastDate
GROUP BY
  calendar.date


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкна няколко реда въз основа на заявка?

  2. Как да търсите и замените всички екземпляри на низ в база данни?

  3. Хибернация:Създайте Mysql InnoDB таблици вместо MyISAM

  4. Изберете 3-те най-скорошни записа, където стойностите на една колона са различни

  5. Как да генерирате УНИКАЛНО произволно число в php