2016-05-18 5 views
0

Проблема возникает с конкретной таблицей с 3 столбцами.Оператор SQL, не возвращающий значения

itemnr --item number (int) 7 chars like 1111111 
ccyymm --century year month (int) 6 chars like 201605 
amount --amount of the specific item for that year month combo. 

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

Я создал 12 виртуальных таблиц, используя следующий код

SELECT * 
FROM items 
WHERE ccyymm = year(now())||right('00'||month(now()),2) -1 

Это показывает мне все элементы с where ccyymm = 201604 и она прекрасно работает.

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

SELECT * 
FROM items 
WHERE ccyymm = (case 
       when month(now()) < 12 
       then year(now())- 1||right('00'||month(now()),2) 
       else year(now())||right('00'||month(now()),2) -12 
       end) 

Так что, если я хочу, чтобы получить 12 месяцы назад, месяц меньше 12, он просто вычитает 1 из года, поэтому в основном он должен дать мне 201505. он говорит, что мой SQL действителен, но он еще не возвращает значений, когда я смотрю в базе данных, есть данные для этого ccyymm.

+5

Почему все эти столицы? Пожалуйста, отредактируйте свой пост, это беспокоит, не читайте его. – vaso123

+1

ПОЧЕМУ ВЫ СМОТРЕТЬ В США? Вместо этого покажите нам образцы данных вместе с ожидаемым результатом. Картинка стоит тысячи слов на SO. –

+0

** MOTHER !!!!! ** * Марнус кричит на меня! * – Martin

ответ

2
SELECT * FROM ITEMS WHERE CCYYMM = (year(now()) * 100 + month(now())) - 100 
+0

Спасибо, П.Сальмон, ты мне очень помог –

+0

Хе-хе, поэтому я сделал это сейчас. Спасибо, что указали это на 2 меня. –

-2

В ГДЕ попробуйте smth как CCYYMM> (сейчас минус один год) , хотя я не знаю точного синтаксиса для этой последней части.

0

Вы отметили этот вопрос как MySQL & SQL.

Если вы используете MySQL, то вы можете использовать функции даты:

SELECT * FROM ITEMS WHERE CCYYMM = date_format(date_sub(now(),INTERVAL 6 MONTH), '%Y%m'); 
Смежные вопросы