sql >> Databáze >  >> RDS >> Mysql

Průběžný součet za časové období – doplňte chybějící data

Chcete-li pokrýt chybějící měsíce, vytvořte šablonu tabulky, ke které se připojíte.

Berte to jako ukládání do mezipaměti. Místo procházení a vyplňování mezer stačí mít kalendář uložený ve své databázi.

Můžete dokonce zkombinovat více kalendářů (začátek měsíce, začátek týdne, státní svátky, pracovní den atd.) do jedné tabulky se spoustou příznaků vyhledávání a indexů.

Skončíte s něčím jako...

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

UPRAVIT

Právě jsem si všiml, že OP chce průběžný součet.

To -je- možné v SQL, ale je to extrémně neefektivní. Důvodem je, že výsledek z jednoho měsíce se nepoužije pro výpočet následujícího měsíce. Místo toho je třeba znovu vypočítat celý průběžný součet.

Z tohoto důvodu se obvykle důrazně doporučuje vypočítat měsíční součet výše uvedeným způsobem a poté pomocí aplikace procházet a vytvářet průběžné celkové hodnoty.

Pokud opravdu musí to udělat v SQL, bylo by to něco jako...

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. Jak vytvořit Serverless GraphQL API pro MySQL, Postgres a Aurora

  2. Google App Script JDBC/MySql:nejste vlastníkem chyby vlákna

  3. Závažná chyba:Volání nedefinované funkce getRecords() v C:\xampp\htdocs\Employees.php na řádku 101

  4. MySQLd se po upgradu vaření z 5.6 na 5.7 nespustí