【问题标题】:Mysql Join Using Timedifference on TimestampsMysql Join 使用时间戳中的时间差
【发布时间】:2013-12-10 10:17:45
【问题描述】:

我有两张表,killlog 和 deathlog 记录在线游戏的死亡和击杀信息。我想加入这两个表以制作杀戮板。

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

我想在时差方面将每个杀戮与最近的死亡相匹配,但是我只想将每个死亡与单个杀戮相匹配。

目前我有以下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 |
+--------+---------+------------+------------+---------------------+---------------------+----------+

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

我的问题是如何确保我只将每个死亡归还一次,并且不会将同一个死亡加入到多次杀戮中。

【问题讨论】:

    标签: mysql join unique closest


    【解决方案1】:
    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
    

    【讨论】:

    • 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) &lt;= 600 partition by TIMEDIFF(killlog.Timestamp, deathlog.Timestamp) &lt;= 600 这会导致 SQL 错误,我找不到太多关于 MySQL 的“分区依据”的信息来查看问题所在。
    猜你喜欢
    • 2012-06-03
    • 2012-11-28
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多