2013-12-10 72 views
1

我有兩張表,killlog和deathlog記錄來自在線遊戲的死亡和殺死信息。我想加入這兩張桌子來製作一個殺人板。Mysql在時間戳上使用時間差異

這是可能的,通過查看時間戳殺死和死亡記錄並加入每個殺死時間最接近的死亡。殺人和死亡之間的時間差異通常比較接近,但可以長達10分鐘。

我想在時間差異方面將每次殺死與CLOSEST死亡進行匹配,但是我只想將每次死亡與單次殺死相匹配。

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

在這裏你可以看到與兩種不同的殺死相匹配的死亡。

我的問題是如何確保我只返回一次死亡,並且沒有加入多次死亡。

回答

0
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 
+0

'SELECT 不同killlog.ID,deathlog.id,killlog.PlayerName,deathlog.PlayerName,killlog.Timestamp作爲消磨時間,如deathlog.Timestamp deathtime, TIMEDIFF(killlog.Timestamp,deathlog.Timestamp) FROM killlog INNER JOIN deathlog上 TIMEDIFF(killlog.Timestamp,deathlog.Timestamp)<= 600 通過 TIMEDIFF分區(killlog.Timestamp,deathlog.Timestamp)<= 600' 這導致SQL錯誤,我找不到有關「分區依據」的很多信息,以供MySQL查看問題在於。 – user2976138