• ベストアンサー

バッチ処理SQL文でmax関数を使った古いデータの削除

バッチ処理で1年前の古いデータの削除をしたいのですが日付が20060401のような数値になっています。 MAX関数を使ってSQL文を作ってみたのですが動きません(^_^;) ***BATファイル*** c:\mysql\bin\mysql -u user -p**** <c:\mysql\juten-del.sql ***SQL文*** DELETE FROM 重点商品管理.重点商品 WHERE 日付 <= (MAX(日付)-10000) かねやんMYSQLADMINを使うと≪Invalid use of group function≫とエラーメッセージが出ます。 【日付 <= 20050301】のように書くと削除されるので【日付 <= (MAX(日付)-10000)】の部分が間違っていると思うのですが・・・それともバッチの作り方が悪いのでしょうか? どなたかよろしくお願いします<(_ _)>

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

#4回答者です。 #3さんの回答の削除の条件を、以下のように変えてみてください。 (日付はdate型でなく、数値列とのことなので) select @maxdate:=max(日付) from 重点商品管理.重点商品; delete from 重点商品管理.重点商品 where 日付 <= @maxdate-10000;

13B-RE
質問者

お礼

ありがとうございました。 出来ました! あらためてバッチ処理・SQL文について勉強したいと思いました。 皆さんこれからもよろしくお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

where 日付<=max(日付) というのは、構文として間違っています。 max等を比較で使用できるのは、group byを使用し、havingで条件指定するケースです。 副問い合わせ(サブクエリ)を使用し、 where 日付<=(select max(日付) from ~) という方法もありますが、サポートバージョンが MySQLの4.1以降だと記憶しています。 そのため、#1、#2さんの回答は、エラーになってしまう可能性があります。 #3さんの方法で、大丈夫ではないかと思います。

すると、全ての回答が全文表示されます。
回答No.3

バッチ処理でしたら、変数を使って見てはいかがでしょうか? まず、最大日付を取得して、変数に格納します。 select @maxdate:=max(日付) from 重点商品管理.重点商品; @maxdateは変数になります。 これを使用して、 delete from 重点商品管理.重点商品 where 日付 <= date_add(@maxdate,interval -1 month); で、変数より一ヶ月前より小さいか等しい値を削除しています。 これでいかがでしょうか?

13B-RE
質問者

お礼

ありがとうございました。 変数が使えるのですね。 これなら他にもいろいろ使えそうです。

すると、全ての回答が全文表示されます。
  • bdr
  • ベストアンサー率43% (35/80)
回答No.2

#1です SQL文を間違えていました MySQLは使ったことがないので動作するかはわかりませんが... DELETE FROM 重点商品管理.重点商品 WHERE 日付 <= (select MAX(日付)-10000 from 重点商品管理)

13B-RE
質問者

お礼

丁寧にありがとうございましたm(__)m どうやら私のバージョンではサポートされていないようです。 しかしSQL文の書き方について大変参考になりました。 ありがとうございました

すると、全ての回答が全文表示されます。
  • bdr
  • ベストアンサー率43% (35/80)
回答No.1

DELETE FROM 重点商品管理.重点商品 WHERE 日付 <= (select MAX(日付)-10000 from 重点商品管理.重点商品) 試してないのでわかりませんが、これで動かないですかね? あと、使用しているデータベースがわかれば、より具体的なアドバイスをもらえるかもしれません

13B-RE
質問者

補足

ありがとうございます。<(_ _)> 残念ながら動きませんでした。 Something is wrong in your syntax : 'select MAX(日付)-10000 from 重点商品管理.重点商品)' ノユカ・ : 1 ケヤフワ というエラーメッセージが出ました データベースはMYSQL4.0.26-ntです。 よろしくお願いします。

すると、全ての回答が全文表示されます。

専門家に質問してみよう