2016-05-18 6 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ヶ月の金額を示す表を作成したいとします。

私は私where ccyymm = 201604 を持つすべての項目を示し、それが完璧に動作し、次のコード

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

を使用して12の仮想テーブルを作成しました。

問題は、私が引いてい月が現在の月を超えているとき、私は同様に私は次のように使用して今年から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

あなたはアメリカで何をしていますか?代わりに、期待される出力とともにサンプルデータを表示してください。写真は千の言葉の価値がある。 –

+0

** MOTHER !!!!! ** * Marnusは私に叫んでいます!* – Martin

答えて

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

Pサーモンさんありがとうございました。本当に助けてくれました。 –

+0

Heheだから今私は今でした。それを指摘してくれてありがとう2私。 –

-2

ここでは、最後の部分の正確な構文は分かりませんが、CCYYMM>(今から1年間)のようにsmthを試してください。

0

あなたは両方の質問としてMySQL & SQLとタグ付けしました。

MySQLを使用している場合は、日付関数を使用することができます。

SELECT * FROM ITEMS WHERE CCYYMM = date_format(date_sub(now(),INTERVAL 6 MONTH), '%Y%m'); 
関連する問題