У меня есть SQL-запрос, чтобы получить сумму столбца за последние 13 месяцев. Как добавить ноль, если месяц отсутствует - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть таблица платежей, где я обновляю дату и сумму продления подписки, теперь у меня есть запрос, чтобы выбрать столбец суммы сумм за предыдущие 13 месяцев, но как мне добавить ноль, если данные о платеже за месяц отсутствуютвыбранные последние 13 месяцев записи.

SELECT DATE_FORMAT(dtSubscriptionRenewalDate, "%b - %Y") AS month, SUM(intPaymentAmount) as usd13mon FROM `tbl_pi_payment` WHERE strCurrencyCode = 'USD' and dtSubscriptionRenewalDate <= NOW() and dtSubscriptionRenewalDate >= Date_add(Now(),interval - 13 month) GROUP BY DATE_FORMAT(dtSubscriptionRenewalDate, "%Y-%m")

month      usd13mon
Oct - 2018 55
Dec - 2018 79
Jan - 2019 16
Feb - 2019 93
Mar - 2019 80
Apr - 2019 83
May - 2019 34
Jun - 2019 23
Jul - 2019 25
Aug - 2019 37
Sep - 2019 17
Oct - 2019 44

В вышеупомянутых выходных данных отсутствует ноябрь 2018, поскольку в таблице имеются данные.

1 Ответ

0 голосов
/ 07 ноября 2019

Вы можете попробовать ввести таблицу календаря, которая представляет каждый месяц, который вы хотите видеть в своем отчете:

SELECT
    m.my,
    COALESCE(SUM(t.intPaymentAmount), 0) AS usd13mon
FROM
(
    SELECT 'Nov - 2018' AS my UNION ALL
    SELECT 'Dec - 2018' UNION ALL
    SELECT 'Jan - 2019' UNION ALL
    ...
    SELECT 'Nov - 2019'
) m
LEFT JOIN tbl_pi_payment t
    ON m.my = DATE_FORMAT(t.dtSubscriptionRenewalDate, '%b - %Y') AND
       t.strCurrencyCode = 'USD' AND
       t.dtSubscriptionRenewalDate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL - 13 MONTH)
GROUP BY
    m.my;
...