■環境
MySQLバージョン:5.6.36
■質問(※2019/11/21 00:00 大きく修正しております。申し訳ありません。。)
以下のような「サンプルデータ」、「期待する結果」、「(期待結果は取得できるが、時間がかかる)SQL」において、パフォーマンスが遅く困っています。
改善方法をご存知の方がいらしたら、ご教示お願いできませんでしょうか。
●サンプルデータ Name,X,Y,create_time (A,0,0,'2019-11-20 01:00'), (A,0,1,'2019-11-20 01:10'), (B,0,1,'2019-11-20 01:20'), (A,0,1,'2019-11-20 01:30'), (A,1,1,'2019-11-20 01:40'), (B,1,1,'2019-11-20 01:50'), (A,0,1,'2019-11-20 02:00'), (A,0,1,'2019-11-20 03:50'), (B,0,1,'2019-11-20 05:50')
●期待する結果…当該Nameの、それまでのパターン別発生回数が知りたいです |Name|X|Y|count|create_time|0-0|0-1|1-0|1-1| |A|0|0|2019-11-20 01:00|0|0|0|0| |A|0|1|2019-11-20 01:10|1|0|0|0| |B|0|1|2019-11-20 01:20|0|0|0|0| |A|0|1|2019-11-20 01:30|1|1|0|0| |A|1|1|2019-11-20 01:40|1|2|0|0| |B|1|1|2019-11-20 01:50|0|1|0|0| |A|0|1|2019-11-20 02:00|1|2|0|1| |A|0|1|2019-11-20 03:50|1|3|0|1| |B|0|1|2019-11-20 05:50|0|1|0|1|
MySQL
1Select Name,X,Y,create_time,( 2 Select count(X=0 and Y=0) 3 From Table as B 4 Where A.Name=B.Name 5 And A.create_time > B.create_time 6 ), 7 ( 8 Select count(X=0 and Y=1) 9 From Table as B 10 Where A.Name=B.Name 11 And A.create_time > B.create_time 12 ) 13 ( 14 Select count(X=1 and Y=0) 15 From Table as B 16 Where A.Name=B.Name 17 And A.create_time > B.create_time 18 ), 19 ( 20 Select count(X=1 and Y=1) 21 From Table as B 22 Where A.Name=B.Name 23 And A.create_time > B.create_time 24 ) 25From Table as A 26 27(※実行・期待された結果は取得できるが、時間がかかってしまう)
X,Yの組み合わせごとに、当該データより(create_timeが)古いデータの計数を行いたいです。
組み合わせ数・行数が多いため、クエリが終わらない状況となってしまっています。
上記のMySQLバージョンだと、With句・ウィンドウ関数が使えないみたいで…
サブクエリ部分をCaseで分岐させてテーブル1周で実施できないか試したりしたのですが、うまく行きませんでした。
不足・不明点等あれば、ご指摘いただけますと幸いです。
以上、何卒宜しくお願いいたします。
回答3件
あなたの回答
tips
プレビュー