こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

バッチ処理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)】の部分が間違っていると思うのですが・・・それともバッチの作り方が悪いのでしょうか?

どなたかよろしくお願いします<(_ _)>

投稿日時 - 2006-04-11 09:01:05

QNo.2084838

すぐに回答ほしいです

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

#4回答者です。

#3さんの回答の削除の条件を、以下のように変えてみてください。
(日付はdate型でなく、数値列とのことなので)

select @maxdate:=max(日付) from 重点商品管理.重点商品;

delete from 重点商品管理.重点商品 where 日付 <= @maxdate-10000;

投稿日時 - 2006-04-12 03:36:33

お礼

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

投稿日時 - 2006-04-12 08:53:53

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

where 日付<=max(日付)
というのは、構文として間違っています。

max等を比較で使用できるのは、group byを使用し、havingで条件指定するケースです。

副問い合わせ(サブクエリ)を使用し、
where 日付<=(select max(日付) from ~)
という方法もありますが、サポートバージョンが
MySQLの4.1以降だと記憶しています。
そのため、#1、#2さんの回答は、エラーになってしまう可能性があります。

#3さんの方法で、大丈夫ではないかと思います。

投稿日時 - 2006-04-12 01:49:38

ANo.3

バッチ処理でしたら、変数を使って見てはいかがでしょうか?

まず、最大日付を取得して、変数に格納します。
select @maxdate:=max(日付) from 重点商品管理.重点商品;
@maxdateは変数になります。
これを使用して、
delete from 重点商品管理.重点商品 where 日付 <= date_add(@maxdate,interval -1 month);

で、変数より一ヶ月前より小さいか等しい値を削除しています。

これでいかがでしょうか?

投稿日時 - 2006-04-11 23:54:26

お礼

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

投稿日時 - 2006-04-12 08:52:09

ANo.2

bdr

#1です
SQL文を間違えていました
MySQLは使ったことがないので動作するかはわかりませんが...

DELETE FROM 重点商品管理.重点商品 WHERE 日付 <= (select MAX(日付)-10000 from 重点商品管理)

投稿日時 - 2006-04-11 19:03:43

お礼

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

投稿日時 - 2006-04-12 08:50:09

ANo.1

bdr

DELETE FROM 重点商品管理.重点商品 WHERE 日付 <= (select MAX(日付)-10000 from 重点商品管理.重点商品)

試してないのでわかりませんが、これで動かないですかね?

あと、使用しているデータベースがわかれば、より具体的なアドバイスをもらえるかもしれません

投稿日時 - 2006-04-11 10:00:58

補足

ありがとうございます。<(_ _)>
残念ながら動きませんでした。

Something is wrong in your syntax : 'select MAX(日付)-10000 from 重点商品管理.重点商品)' ノユカ・ : 1 ケヤフワ

というエラーメッセージが出ました

データベースはMYSQL4.0.26-ntです。
よろしくお願いします。

投稿日時 - 2006-04-11 12:10:49

あなたにオススメの質問