2012-05-11 96 views
1

我有一個像這樣設置的較量的MySQL表。如何結合具有類似時間戳的兩行並返回兩個

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

兩個人之間的每個實際會在表中記錄了兩次,有獨特的boutID和boutdate(反映的那一刻時,它實際上是輸入,但5分鐘等之內)和一個的記錄運動員是另一方的反對者,反之亦然。這兩個記錄不一定是連續的。每天有兩個參加者會議,間隔較長的時間間隔:我們正在尋找時間戳和身份證號碼中最接近的兩個(假設這兩個屬於一起)。

我想選擇屬於連成一排(和實現,並希望它會做兩次)這樣的記錄,它會輸出匹配的行是這樣的:

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` 

回答

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); 

此查詢將表現良好

+0

正確地匹配在一起,所有的時間不,它不是返回東西。 –