最近の連続失敗回数が3回の登録番号を求めるクエリがわかりません。
教えてください。
DBは、MySQL version: 4.0.22で、副問合せ等は使用できません。
create table t_test(
n_no integer,-- 登録番号
n_flg integer,-- 0:成功1:失敗
d_update date-- 更新日付
);
insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-01');
insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-02');
insert into t_test (n_no, n_flg, d_update)values (1,0,'2007-06-03');
insert into t_test (n_no, n_flg, d_update)values (1,1,'2007-06-04');
insert into t_test (n_no, n_flg, d_update)values (1,1,'2007-06-05');
insert into t_test (n_no, n_flg, d_update)values (2,0,'2007-06-01');
insert into t_test (n_no, n_flg, d_update)values (2,0,'2007-06-02');
insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-03');
insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-04');
insert into t_test (n_no, n_flg, d_update)values (2,1,'2007-06-05');
insert into t_test (n_no, n_flg, d_update)values (3,0,'2007-06-03');
insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-04');
insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-05');
insert into t_test (n_no, n_flg, d_update)values (3,1,'2007-06-06');
insert into t_test (n_no, n_flg, d_update)values (3,0,'2007-06-07');
No.2ベストアンサー
- 回答日時:
4回以上を除くのであれば、最近から過去4更新のデータをとって、
ビットをたてて計算するのかなぁ・・・
ぱっと思いついたものなので効率的かどうかはわかりません。
SET @RANK=0,@NO=NULL;
CREATE TEMPORARY TABLE `temp_t_test`
SELECT n_no,n_flg, d_update,if(@NO=`n_no`,@RANK:=@RANK+1,@RANK:=1) AS `RANK`,@NO:=n_no AS `NO`
FROM `t_test`
ORDER BY `n_no` ASC,`d_update` DESC;
SELECT `n_no` ,SUM(`n_flg`*POW(2,`RANK`-1)) AS `FLG`
FROM `temp_t_test`
WHERE 1
AND `RANK` <=4
AND `n_flg`=1
GROUP BY `n_no`
HAVING `FLG`=7;
No.1
- 回答日時:
>最近の連続失敗回数が3回
の仕様提言があいまいです。
「ここ3回の更新の際、連続3回失敗しているもの」なのでしょうか?
「最新では失敗していても成功していてもかまわないが、もっとも近い失敗をみたとき
その前回、前々回が失敗しているもの」なのでしょうか?
前者ならば日付を3つとりだせばすむのですが、後者だと、失敗した更新日まで
さかのぼらなくてはなりません。
また、3回なのか3回以上なのでしょうか?
3回はいいけど4回はだめなら4回のものを除外する処理が必要です。
さらに深読みすれば「連続失敗回数が3回」ということなら、連続して失敗していない
失敗はカウントせず、2回以上失敗した場合の連続回数が3回・・・なんてふうにも
よめます。
質問者さんがなにをもとめているわからないですが、とりあえず何もしないのも
なんなんで変数とテンポラリを使ってやってみました。
うごくとはおもいますが、精査していないので効率的ではないとおもいます。
SET @RANK=0,@NO=NULL;
CREATE TEMPORARY TABLE `temp_t_test`
SELECT n_no,n_flg, d_update,if(@NO=`n_no`,@RANK:=@RANK+1,@RANK:=1) AS `RANK`,@NO:=n_no AS `NO`
FROM `t_test`
ORDER BY `n_no` ASC,`d_update` DESC;
SELECT `n_no` ,COUNT(*) AS `COUNT`
FROM `temp_t_test`
WHERE `RANK`<=3
AND `n_flg`=1
GROUP BY `n_no`
HAVING `COUNT` =3;
この回答への補足
早速のご回答どうもありがとうございます。
おっしゃるとおり仕様提言が甘くなりまして申し訳ございません。
yambejp様のおっしゃる下記の点が不足していました。
その点を含めた場合、どうすればいいのでしょうか・・。
>ここ3回の更新の際、連続3回失敗しているもの
>3回はいいけど4回はだめなら4回のものを除外する
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php エラー 2 2022/10/23 16:43
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- PHP ここで言う「アロー演算子」の役割を教えてください。 1 2022/03/26 02:38
- PHP php エラー 3 2022/11/18 23:32
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
'modify' 付近に不適切な構文が...
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
フラグをたてるってどういうこ...
-
truncate tableを使って複数の...
-
SELECTした結果に行番号を求めたい
-
テーブル名が可変の場合のクエ...
-
オラクルのUPDATEで複数テーブル
-
Accessの構成をコピーしたい
-
PostgreSQLのtimestamp型で時間...
-
結合したテーブルをSUMしたい
-
SQLサーバに対するSQL文で抽出...
-
DB2のSQLコマンドについて
-
集計でテストの各教科の最高得...
-
timestampのデータはどのように...
-
追加クエリで重複データなしで...
-
Accessで今日から5日後
-
Access にて "mm:ss.0" 形式の ...
-
CASEでBETWEEN制約
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
'modify' 付近に不適切な構文が...
-
MySQL初心者で困っています
-
複数表からのカウントを教えて...
-
sqlによるデータの変更
-
複雑なクエリ
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
sqlに記述できない文字
-
UPDATEで既存のレコードに文字...
-
テーブル名が可変の場合のクエ...
-
エラーを起こす方法
-
オラクルのUPDATEで複数テーブル
-
truncate tableを使って複数の...
-
結合したテーブルをSUMしたい
-
Accessで今日から5日後
-
既存データをINSERT文にして出...
-
timestampのデータはどのように...
-
SQLで、Join句で結合したテ...
-
PostgreSQLのtimestamp型で時間...
おすすめ情報