Sql получить данные, основанные на числах месяца в году, которые являются числами - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть таблица с этими данными:

id              quantity              month                  year
1                10                   12                    2020
2                78                   3                     2019
3                67                   4                     2020
4                78                   3                     2020
5                56                   2                     2020
6                34                   4                     2017
7                56                   2                     2017

Я хочу получить все данные с 2017 года, с 3 по 2020 год 3 Мои sql выглядят так:

where (dc.year >= 2017 and dc.month >= 3) and (dc.year <= 2020 and dc.month <= 3)
GROUP BY dc.year, dc.month

это sql получить только данные за 2017,3 и 2018, 3 и 2019,3 и 2020,3 Но мне нужен весь интервал. Если я поставлю

where dc.year >= 2017 and dc.year <= 2020
GROUP BY dc.year, dc.month

Получение всех данных, но мне нужны данные за месяц 2017 3 -----> месяц 2020 3 (все интервалы)

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

Один метод использует арифметику c:

where dc.year * 12 + dc.month between 2017 * 12 + 3 and 2020 * 12 + 3

Альтернативно, вы можете использовать более сложное выражение:

where (dc.year = 2017 and dc.month >= 3) or
      (dc.year > 2017 and dc.year < 2020) or
      (dc.year = 202 and dc.month <= 3)
1 голос
/ 10 апреля 2020

Вы можете просто построить даты из этих чисел и использовать их для сравнения. Я думаю, что это делает намерение более ясным и действительно соответствует духу вашей логики c (которая должна фильтроваться по дате):

В SQL Сервер:

where datefromparts(year, month, 1) between '2017-03-01' and '2020-03-01'

В MySQL:

where concat_ws('-', year, month, 1) between '2017-03-01' and '2020-03-01'
...