質問: @変数の使い方 お世話になります。 以下のようなクエリで、変数にnullが入ります。 何が悪かったのでしょうか、ご教示ください。 select @change := max( 購入日 + interval 2 year ) as 交換日 from テーブル where @change > '2012-04-24' お願いします。
回答: >何が悪かったのでしょうか、ご教示ください。 これはかなりダメダメですね (1)もともとmysqlはユーザー変数の評価順序は定義されていないため、 表記のような書き方はngです 「ステートメントの一部でユーザー変数値を割り当てないことおよび同一ステートメント内の他部分で同じ変数を使用しないこと」 という原則があります。 http://dev.mysql.com/doc/refman/5.1-olh/ja/user-variables.html (2)仮に評価が順序立ててされたとしても、select で代入されるのを まってからだとwhereで条件を絞り込む時点では未設定ですよね ロジック自体が変です (3)group by をしないsql文でmaxをとっていますがなんの最大値を とりたいのか意味がわかりません 特定条件の購入日を絞り込みたいという意図があるのはなんとなくわかりますので 命題が明確になれば近しいことはできそうな気がしますが、その場合も サブクエリでの処理になるとおもいます。 (4)maxのとりかたもせめて購入日のmaxをとって2年たした方がいいですね