如何组合具有相似时间戳的两行并返回两者

时间:2012-05-11 20:25:18

标签: mysql

我有一个像这样设置的MySQL表格。

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

两个人之间的每次实际会议在表格中记录两次,有一个独特的boutID和boutdate(反映实际进入的时刻,但在另一个的5分钟内)和一个人的记录运动员是对手另一个,反之亦然。这两个记录不一定是连续的。每天有两个参与者的额外会议,以较长的时间间隔分开:我们正在寻找时间戳和ID号中最接近的两个(假设这两个是属于一起的两个)。

我正在尝试选择属于一行的记录(并实现并希望它将完成两次),以便输出匹配的行,如下所示:

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`

1 个答案:

答案 0 :(得分: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);

此查询将表现良好