2016-09-20 6 views
0

私は以下の2つのmysqlテーブルを持っています。キーで直接接続されていない2つのmysqlテーブルの関連方法

表名:分析

id execution_time 
--- -------------- 
A1 1 
A2 20 
A3 35 

テーブル名:バグ

bug_id creation_time 
------ ------------- 
1000 1.1 
1001 1.3 
1002 20.2 
1003 20.7 
1004 20.9 
1005 35.1 

バグ1000年、1001年には、Analysis A1

バグ1002、1003、1004のために作成されています分析用に作成されます。A2

解析用のバグ1005が作成されました。A3

したがって、Bug creation_timeは常にAnalysisのexecution_timeより大きく、bug_creation_timeは常に後の解析の実行よりも小さくなります。

今、1)私は解析IDを持っているので、関連するバグ(bug_id)を見つけることができます。 Iは、与えられたバグデータ(IDの関連解析ID、CREATION_TIME)

+0

なぜバグ1004は、このテーブルに二回は存在しませんか?分析A3の理由は何ですか?あなたのロジックはそれ自体を説明していません。 –

+0

申し訳ありませんが、間違いでした。編集されました。 –

答えて

3

1)を見つけることができる方法

2) SQL FIDDLE DEMO

SELECT b.*, t.* 
FROM Bugs b 
CROSS JOIN ( SELECT a1.id, 
        a1.`execution_time` as `start_time`, 
        a2.`execution_time` as `end_time` 
       FROM Analysis a1 
       LEFT JOIN Analysis a2 
       ON a1.`execution_time` < a2.`execution_time` 
       WHERE a2.`execution_time` IS NULL 
       OR a2.`execution_time` = (SELECT min(z.`execution_time`) 
              FROM Analysis z 
              WHERE z.`execution_time` > a1.`execution_time`) 
      ) t 
WHERE b.`creation_time` between `start_time` and `end_time` 
    or (b.`creation_time` > `start_time` and `end_time` IS NULL) 

OUTPUT:のみによってフィルタを必要としますid

enter image description here

2)

SELECT * 
FROM Analysis a 
WHERE a.id = ( SELECT MAX(id) 
       FROM Analysis a 
       WHERE a.execution_time < @bugCreationTime) 
+0

分析の実行時間が1より長くなった場合、解決策1)は機能しません。その場合、1)どのように見えるでしょうか?どうもありがとう。 –

+0

はい私はあなたの質問を変えるのを見ました。それに取り組む。 2)はどう? –

+0

完了、デモを確認 –

関連する問題