MySQL - выберите финансовый год

У меня есть этот ВЫБОР:

SELECT 
    m.`maschine-name` AS byMaschine,
    q.`mname` AS byMName,
    SUM(YEAR(q.`created`) = YEAR(CURDATE())) AS total
FROM qualitaet q INNER JOIN
    maschinen m 
    ON m.maschine = q.maschine
WHERE
    q.`status`='1'
GROUP BY
    q.maschine, q.mname;

чтобы получить все результаты за текущий год, и это выглядит так:

| maschine-name | mname | total |
|     TYP 1     |   0   |   4   |
|     TYP 2     |   3   |   4   |
|     TYP 2     |   4   |   4   |
|     TYP 3     |   0   |   4   |
|     TYP 4     |   0   |   4   |

см. SQL Fiddle здесь

Но я хочу ВЫБРАТЬ его как финансовый год (финансовый год), начинающийся >= 1 октября, чтобы получить следующий результат:

| maschine-name | mname | total |
|     TYP 1     |   0   |   3   |
|     TYP 2     |   3   |   2   |
|     TYP 2     |   4   |   0   |
|     TYP 3     |   0   |   2   |
|     TYP 4     |   0   |   2   |

у меня есть разные операторы даты, которые работают все, но финансовый год сводит меня с ума :-(

показать данные за СЕГОДНЯ:

SUM(DATE(created) = CURDATE()) AS total

показать данные за ТЕКУЩУЮ НЕДЕЛЮ:

SUM(YEARWEEK(q.`created`, 1) = YEARWEEK(CURRENT_DATE, 1)) AS total

показать данные за ТЕКУЩИЙ МЕСЯЦ:

SUM(q.`created` >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY) AS total

показать данные за ТЕКУЩИЙ ГОД:

SUM(YEAR(q.`created`) = YEAR(CURDATE())) AS total


Есть ли способ получить этот результат сверху?

С уважением и с Новым годом ;-)


person bernte    schedule 31.12.2015    source источник
comment
Просто использовать DATE_ADD или DATE_SUB, чтобы вычесть или добавить 10 месяцев?   -  person Norbert van Nobelen    schedule 01.01.2016


Ответы (1)


Я сделал это с помощью MAKEDATE. Дата начала 1 октября

SUM(q.`created` >= MAKEDATE(year(now()-interval 1 year),1) + interval 9 month) AS total

см. SQLFiddle здесь

завершить ВЫБЕРИТЕ:

SELECT 
    m.`maschine-name` AS byMaschine,
    q.`mname` AS byMName,
    SUM(q.`created` >= MAKEDATE(year(now()-interval 1 year),1) + interval 9 month) AS total
FROM qualitaet q INNER JOIN
    maschinen m 
    ON m.maschine = q.maschine
WHERE
    q.`status`='1'
GROUP BY
    q.maschine, q.mname;

Теперь я получаю этот результат:

| maschine-name | mname | total |
|     TYP 1     |   0   |   3   |
|     TYP 2     |   3   |   2   |
|     TYP 2     |   4   |   0   |
|     TYP 3     |   0   |   2   |
|     TYP 4     |   0   |   2   |
person bernte    schedule 01.01.2016