Как получить сводные данные за каждый месяц в MySQL

Вы устанавливаете демон с помощью setInterval. Ожидается поведение, о котором вы говорите. Так работает JavaScript. Его не Угловая специфичность.

SetInterval всегда возвращает идентификатор, который вы можете отслеживать в своем контроллере. Если вы хотите его уничтожить, убедитесь, что вы сделали это конкретно.

например:

greenToAmber() {
        let x = 0;
        $scope.myDemon = setInterval(function () {
          x++;
          ..... Rest of code
        }, 500);
      }
    }

//Somewhere else; where you want to destroy the interval/stop the interval:
If($scope.myDemon) {
    clearInterval($scope.myDemon);
}
0
задан Rajib Deb 19 January 2019 в 10:22
поделиться

1 ответ

Вот немедленное исправление вашего запроса. Вам нужно сложить по выражению CASE, а не наоборот.

SELECT
    s.item_id,
    SUM(CASE WHEN MONTH(s.date) = 1 THEN s.item_count END) AS JAN,
    SUM(CASE WHEN MONTH(s.date) = 2 THEN s.item_count END) AS FEB
FROM sales s
GROUP BY
    s.item_id
ORDER BY
    s.item_id;

Но потенциальная проблема с этим запросом состоит в том, что для поддержки большего количества месяцев вам нужно добавить больше столбцов. Кроме того, если вы хотите охватить несколько лет, этот подход также может не масштабироваться. Предполагая, что у вас есть только несколько предметов, вот еще один способ сделать это:

SELECT
    DATE_FORMAT(date, '%Y-%m') AS ym,
    SUM(CASE WHEN item_id = 1 THEN item_count END) AS item1_total,
    SUM(CASE WHEN item_id = 2 THEN item_count END) AS item2_total
FROM sales
GROUP BY
    DATE_FORMAT(date, '%Y-%m');

Это будет генерировать вывод, похожий на:

ym       item1_total  item2_total
2018-01  11           5
2018-02  7            3

Какая версия вы используете, зависит от того, сколько месяцы, которые требуются в вашем отчете, по сравнению с тем, сколько элементов может появиться в ваших данных.

0
ответ дан Tim Biegeleisen 19 January 2019 в 10:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: