Mysql Join 在时间戳上使用时差

标签 mysql join unique closest

我有两个表,killlog 和 deathlog,记录了在线游戏中的死亡和击杀信息。我想加入这两个表以产生一个杀戮板。

这可以通过查看记录的杀戮和死亡时间戳并根据每次杀戮的时间加入最接近的死亡来实现。杀死和死亡之间的时间差通常相对接近,但可能相差多达 10 分钟。

我想在时间差方面将 EACH kill 与 CLOSEST death 相匹配,但是我只想将每个 death 与单个 kill 相匹配。

目前我有如下SQL语句

SELECT
distinct killlog.ID, deathlog.id, killlog.PlayerName, deathlog.PlayerName, killlog.Timestamp as killtime, deathlog.Timestamp as deathtime, 
TIMEDIFF(killlog.Timestamp, deathlog.Timestamp)
FROM killlog
inner JOIN deathlog on
TIMEDIFF(killlog.Timestamp, deathlog.Timestamp) <= 600 
GROUP by 
killlog.id

这几乎给了我想要的输出,但在某些情况下,我看到死亡与多次杀戮相匹配。例如:

+--------+---------+------------+------------+---------------------+---------------------+----------+
| killID | DeathID | KillerName | VictimName | killTime            | deathTime           | timeDiff |
+--------+---------+------------+------------+---------------------+---------------------+----------+
|      8 |      28 | DKmintz    | Hanfkeks   | 09/12/2013 21:30:23 | 09/12/2013 21:30:09 | 00:00:14 |
+--------+---------+------------+------------+---------------------+---------------------+----------+
|      9 |      28 | Sam Fisher | Hanfkeks   | 09/12/2013 21:31:03 | 09/12/2013 21:30:09 | 00:00:54 |
+--------+---------+------------+------------+---------------------+---------------------+----------+

在这里,您可以看到同一次死亡与两次不同的击杀相匹配。

我的问题是如何确保每次死亡只返回一次,而不是将同一次死亡加入多次杀戮。

最佳答案

TIMEDIFF(killlog.Timestamp, deathlog.Timestamp) <= 600 
GROUP by

Here insted of groub by use partiotion by(kill time)<=600 and you will 
8   28  DKmintz Hanfkeks    09/12/2013 21:30:23 09/12/2013 21:30:09 00:00:14 record

关于Mysql Join 在时间戳上使用时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20491707/

相关文章:

php - 注册后验证出现问题

mysql - 按查询分组时出现问题

php - 如何 JOIN 这 3 个表

Ios- Parse.com 删除一个对象

c - 中止陷阱 : 6 with loop in c

Mysql 间隔新年后不起作用

javascript - foreach slider 仅显示一个数据库条目

mysql - mysql中如何使用join和union进行子查询

matlab - 在 MATLAB 中有效地找到三个字符向量的唯一三元组

r - 在 R 中查找公共(public)行