dポイントプレゼントキャンペーン実施中!

お世話になります。

現在、以下のようにテーブルにデータが入っているとします。

そこで、発生時間から30分経過したものを抽出するとき、どのようにSQL文を書けばいいのかずっと悩んでいます。

ただし、未回復のときは、回復時間のカラムにデータは入っていません。

DB名:サンプル
テーブル名:テーブル
名称、発生時間、回復時間
(A、2005/08/10 10:10:10、2005/08/10 18:10:00)
(B、2005/08/11 11:15:00、)
(C、2005/08/13 22:50:18、2005/08/15 20:00:01)
(D、2005/08/13 22:50:19、2005/08/13 23:00:00)

Bは現在も、継続して発生中。
この中で30分以上継続しているものを抽出すると、

いろいろ考えたのですが、抽出する条件は
・回復しておらず、発生時間から30分以上経過しているもの
・回復時間から発生時間を引いて、30分以上の差があるもの

だと思います。

※指定する時間(30分経過等)は、30分の他に1時間経過、1日経過とか、選択できるようにしますが、わかりやすいように30分経過したもののみ扱うこととします。


わかりづらい質問で申し訳ありません。よろしくお願い致します。

A 回答 (2件)

とりあえず、回復時間がNULLなら、現在時刻(NOW())と見なすようにすればいけるのでは。



select * from T where SUBTIME( IFNULL( 回復時間, NOW() ), 発生時間)> SEC_TO_TIME( 30 * 60 );


?なんか性能が低そうなクエリですが。
    • good
    • 0
この回答へのお礼

回答していただき、ありがとうございました。
自分がSQL言語が未熟なのがよくわかりました・・・^^;

理屈はよくわかったのですが、なぜかうまく動きませんでした・・・

年月日の区切りが、データベースでは'/'なのですが、'-'でないと動かないとかあるのでしょうか?

まだまだ勉強が足りませんががんばってみます。
ありがとうございました。

お礼日時:2005/08/16 22:07

SELECT 名称


FROM テーブル
WHERE (ADDDATE(発生時間, INTERVAL 30 MINUTE) < NOW() AND 回復時間 IS NULL)
OR ADDDATE(発生時間, INTERVAL 30 MINUTE) < 回復時間;

でいけます。

この回答への補足

UNIX_TIMESTAMP(DATE_FORMAT(IFNULL(kaifuku,NOW()),'%Y-%m-%d %H:%i:%s')) - (UNIX_TIMESTAMP(DATE_FORMAT(hassei,'%Y-%m-%d %H:%i:%s'))) > 1800)

このようなSQLをつくったのですが、エラーはでないものの、絞り込めませんでした・・・疲れました。

補足日時:2005/08/17 01:52
    • good
    • 0
この回答へのお礼

回答していただきありがとうございました。
エラーはでなかったのですが、なぜか絞り込めませんでした。

発生時間、回復時間の 年月日を区切る記号が'/'なのですが、'-'でないとだめだとかあるんでしょうか??

もう少し考えてみます。ありがとうございます。

お礼日時:2005/08/16 22:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!