MySQL найти начало и окончание текущего и предыдущего квартала.

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

CREATE OR REPLACE VIEW `SHOW_QUARTER` AS
    SELECT 
        (CASE QUARTER(NOW())
            WHEN 4 THEN DATE_FORMAT(NOW(), '%Y-10-01')
            WHEN 1 THEN DATE_FORMAT(NOW(), '%Y-01-01')
            WHEN 2 THEN DATE_FORMAT(NOW(), '%Y-04-01')
            WHEN 3 THEN DATE_FORMAT(NOW(), '%Y-07-01')
        END) AS `CURRENT_QUARTER_BEGIN`,
        (CASE QUARTER(NOW())
            WHEN 4 THEN DATE_FORMAT(NOW(), '%Y-12-31')
            WHEN 1 THEN DATE_FORMAT(NOW(), '%Y-03-31')
            WHEN 2 THEN DATE_FORMAT(NOW(), '%Y-06-30')
            WHEN 3 THEN DATE_FORMAT(NOW(), '%Y-09-30')
        END) AS `CURRENT_QUARTER_END`,
        (CASE QUARTER(NOW())
            WHEN 1 THEN DATE_FORMAT((NOW() - INTERVAL 1 YEAR), '%Y-10-01')
            WHEN 2 THEN DATE_FORMAT(NOW(), '%Y-01-01')
            WHEN 3 THEN DATE_FORMAT(NOW(), '%Y-04-01')
            WHEN 4 THEN DATE_FORMAT(NOW(), '%Y-07-01')
        END) AS `PREVIOUS_QUARTER_BEGIN`,
        (CASE QUARTER(NOW())
            WHEN 1 THEN DATE_FORMAT((NOW() - INTERVAL 1 YEAR), '%Y-12-31')
            WHEN 2 THEN DATE_FORMAT(NOW(), '%Y-03-31')
            WHEN 3 THEN DATE_FORMAT(NOW(), '%Y-06-30')
            WHEN 4 THEN DATE_FORMAT(NOW(), '%Y-09-30')
        END) AS `PREVIOUS_QUARTER_END`

Результат:

Close Menu