Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Suma bieżąca w zakresie dat — uzupełnij brakujące daty

Aby uzupełnić brakujące miesiące, utwórz tabelę szablonów, do której chcesz dołączyć.

Pomyśl o tym jako o buforowaniu. Zamiast przeglądać i wypełniać luki, po prostu umieść kalendarz w pamięci podręcznej w swojej bazie danych.

Możesz nawet połączyć wiele kalendarzy (początek miesiąca, początek tygodnia, dni ustawowo wolne od pracy, dzień roboczy itp.) w jednej tabeli z kilkoma flagami wyszukiwania i indeksami.

Otrzymujesz coś takiego jak...

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

EDYTUJ

Właśnie zauważyłem, że OP chce mieć bieżącą sumę.

Jest to możliwe w SQL, ale niezwykle nieskuteczny. Powodem jest to, że wynik z jednego miesiąca nie jest używany do obliczania następnego miesiąca. Zamiast tego należy ponownie obliczyć całą bieżącą sumę.

Z tego powodu zwykle zdecydowanie zaleca się obliczenie miesięcznej sumy jak powyżej, a następnie użycie aplikacji do iteracji i utworzenia bieżących wartości sumarycznych.

Jeśli naprawdę musi to zrobić w SQL, byłoby to coś w stylu...

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. Jak skonfigurować bazę danych MySQL WordPress w chmurze

  2. Podzapytanie jako wygenerowana kolumna w mysql?

  3. Wybierz z serii relacji wiele-do-wielu

  4. moja transakcja nie jest wycofywana, gdy coś pójdzie nie tak w C# z mysql?

  5. Nie można przekonwertować wartości daty/godziny MySQL na System.DateTime w VS2010