1

このようにセットアップされた試合のMySQLテーブルがあります。

|------------------------|
|bouts                   |
|------------------------|
|boutID                  |
|recording_athlete       |
|boutdate (timestamp)    |
|opponent                |
|recording_athlete_points|  
|------------------------|

2 人の間の実際のミーティングはそれぞれ、一意の boutID と boutdate (実際に入力された瞬間を反映しますが、他方から 5 分以内) とともにテーブルに 2 回記録され、一方の記録アスリートは他方の対戦相手です。そしてその逆。2 つのレコードは必ずしも連続しているとは限りません。毎日、2 人の参加者のための追加のミーティングがあり、より長い時間間隔で区切られています。タイムスタンプと ID 番号の両方で最も近い 2 つを探しています (これら 2 つが一緒に属していると仮定します)。

次のような一致する行を出力するように、一緒に1つの行に属するレコードを選択しようとしています(そして、それが2回行われることを認識して望んでいます):

boutID|recording_athlete|boutdate|opponent|recording_athlete_points|boutID_b|boutdate_b|opponent_points
01|John|2012-05-10 20:33:04|Jane|15|04|2012-05-10 20:36:12|10
04|Jane|2012-05-10 20:36:12|John|10|01|2012-05-10 20:33:04|15

ここに私がこれまでに持っているものと、私が行く必要があると思う場所がありますが、何を使用すればよいかわかりません。ある種のインターバルステートメント?それとも、まったく別の構造が必要ですか?

SELECT 
    A.`boutID`,
    A.`recording_athlete`,
    A.`boutDate`,
    A.`opponent`,
    A.`recording_athlete_points`,
    B.`boutID` as `boutID_b`,
    B.`boutDate` as `boutdate_b`,
    B.`recording_athlete_points`as `opponent_points`
FROM bouts A
INNER JOIN bouts B on(A.`fullName` = B.`opponent` AND ????? )
ORDER by A.`boutDate`
4

1 に答える 1

0
SELECT 
...
FROM bouts A
JOIN bouts B
   on A.fullName = B.opponent 
   AND B.boutdate between subdate(A.boutdate, interval 5 minute)
                      and adddate(A.boutdate, interval 5 minute)

にインデックスを作成する場合boutdate:

create index bouts_boutdate_index on bouts(boutdate);

このクエリはうまく機能します

于 2012-05-11T20:31:49.827 に答える