Получите промежуточные итоги за каждый месяц на основе даты create_at - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь получить промежуточную сумму за каждый месяц этого года.Таким образом, мой идеальный результат был бы что-то вроде:

January   |  4 
February  |  5
March     |  8
April     | 10
May       | 12
June      | 14
July      | 16
August    | 17
September | 18
October   | 21
November  | 22
December  | 22

Базовый счет будет просто сверяться с первым месяцем, например:

January 1 (sum where created_at < January 1, 2018)
February 1 (sum where created_at < February 1, 2018)
March 1 (sum where created_at < March 1, 2018)
April 1 (sum where created_at < April 1, 2018)
...

Делать это по одному месяцу за разэто просто, так как я могу просто сделать что-то вроде этого:

SELECT *
FROM businesses
WHERE created_at < CONCAT(YEAR(CURDATE()), "-12-01 00:00:01")

Я попытался использовать один из примеров из другого ответа Stackoverflow, но он работает не совсем так, как хотелось бы, так как кажется, что сортировка или что-то испортилосьтак что счетчики не выстраиваются в ряд.

Вы можете увидеть схему сборки и текущий SQL здесь: http://sqlfiddle.com/#!9/0c23cc/20

1 Ответ

0 голосов
/ 02 октября 2018

Попробуйте что-то вроде этого.

SELECT
MONTHNAME( created_at ) AS theMonth,
(
    SELECT
        count( * ) 
    FROM
        businesses AS u1 
    WHERE
        YEAR ( u1.created_at ) = YEAR ( businesses.created_at ) 
        AND u1.created_at <= date_ADD( last_day( businesses.created_at ), INTERVAL 1 DAY ) 
) AS totals 
FROM
    businesses 
WHERE
    YEAR ( businesses.created_at ) = YEAR ( CURDATE( ) ) 
GROUP BY
    MONTHNAME( businesses.created_at ) 
ORDER BY
    MONTH ( businesses.created_at ) ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...