Получить данные на основе года и месяца - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть таблица с некоторыми данными: month_number (int), year (int).

Я хочу получить данные на основе 2 лет и 2 месяцев

SELECT
  tt.year AS raw_annee,
  tt.month AS raw_mois,
  tt.product AS raw_produit,
  tt.quantity_product AS tonnes_prod,
  tt.quantity_n AS raw_tonnes_N,
  tt.quantity_p AS raw_tonnes_P,
  tt.quantity_k AS raw_tonnes_K
FROM test_test as tt    
  WHERE (tt.year >= 2014 AND tt.month_number >= 5)
  AND (tt.year <= 2018 AND tt.month_number <= 5)
  ORDER BY tt.year desc, tt.month_number desc;

Но яполучать только данные за месяц «май» с 2014 по 2018 год, но идея состоит в том, чтобы получить данные за май 2014 ---> май 2018

Можете ли вы мне помочь, пожалуйста?

Ответы [ 4 ]

0 голосов
/ 12 февраля 2019

Вы всегда можете сделать сравнение в виде даты:

where date(concat_ws('-', tt.year, tt.month_number)) between '2014-05-01' and '2018-05-01

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

0 голосов
/ 12 февраля 2019

Я думаю, что вам нужно следующее:

SELECT
  tt.year AS raw_annee,
  tt.month AS raw_mois,
  tt.product AS raw_produit,
  tt.quantity_product AS tonnes_prod,
  tt.quantity_n AS raw_tonnes_N,
  tt.quantity_p AS raw_tonnes_P,
  tt.quantity_k AS raw_tonnes_K
FROM test_test as tt    
  WHERE (tt.year > 2014 AND tt.year < 2018) OR  (tt.year = 2014 AND tt.month_number >= 5) OR  (tt.year = 2018 AND tt.month_number <= 5)
  ORDER BY tt.year desc, tt.month_number desc;

Просто изменение вашей логики в вашем выражении where

0 голосов
/ 12 февраля 2019

Другой способ с датой постройки:

STR_TO_DATE(CONCAT(tt.year,'-',tt.month_number,'-',01), '%Y-%m-%d') 

Пример:

WHERE STR_TO_DATE(CONCAT(tt.year,'-',tt.month_number,'-',01), '%Y-%m-%d')  >= '01-05-2014' AND  STR_TO_DATE(CONCAT(tt.year,'-',tt.month_number,'-',01), '%Y-%m-%d') <= '01-05-2018'

Создать поля даты, месяца, года в MySQL

0 голосов
/ 12 февраля 2019

Вы хотите сравнить месяцы только за первый и последний годы:

  WHERE (tt.year > 2014 AND tt.year < 2018)
    or  (tt.year = 2014 AND tt.month_number >= 5)
    or  (tt.year = 2018 AND tt.month_number <= 5)

В качестве альтернативы:

WHERE (tt.year * 100 + tt.month_number >= 201405)
  AND (tt.year * 100 + tt.month_number <= 201805)

Или, не поддерживается MySQL:

WHERE (tt.year, tt.month_number) between (2014,5) and (2018,5)

Адаптировано к MySQL Раймондом Нейландом:

WHERE (tt.year, tt.month_number) >= (2014,5) AND (tt.year, tt.month_number) <= (2018,5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...