找到最接近的时间戳SQL?

时间:2015-06-04 22:10:14

标签: mysql sql phpmyadmin timestamp

我有两个看起来像这样的表:

沟通:(致电)

Timestamp            FromIDNumber ToIDNumber GeneralLocation 
2012-03-02 09:02:30  878          674        Grasslands 
2012-03-02 11:30:01  456          213        Tundra 
2012-03-02 07:02:12  789          654        Mountains 

运动:

Timestamp            IDNumber Type        X   Y  
2012-03-02 11:02:30  379      pedestrian  32  46
2012-03-01 12:32:41  654      pedestrian  54  56
2012-03-02 07:02:16  789      pedestrian  39  52 

以下查询:

SELECT c.FromIDNumber, m.Timestamp, m.X, m.Y
FROM Communication c
JOIN Movement m ON c.FromIDNumber = m.IDNumber
WHERE m.TimeStamp = (SELECT MIN(mm.Timestamp)
                 FROM Movement mm
                 WHERE mm.TimeStamp >= c.TimeStamp)

基本上,它遍历Commmunication的每一行,并通过查找给定通信时间戳的最接近的移动时间戳来查找呼叫的位置。 (这里是SQL Fiddle)。

我遇到的问题是,它只返回某个movement timestamp的最近communication timestamp。例如,给出这个简单的例子:

 Communication Time: 
 1:10 pm 

 Movement Data: 
 1:09 pm   (100,100)
 1:15 pm   (200,200)

查询将返回1:15pm (200,200),即使最近的timestamp是下午1:09。如何编写SQL查询以查找最近的时间?我发现sql-server有类似的SO post,但我如何在MySQL中执行此操作?

我只是没有多少SQL经验,所以非常感谢帮助!

1 个答案:

答案 0 :(得分:3)

我想你想要这个版本:

SELECT c.FromIDNumber, m.Timestamp, m.X, m.Y
FROM Communication c
JOIN Movement m ON c.FromIDNumber = m.IDNumber
WHERE m.TimeStamp = (SELECT mm.Timestamp
                     FROM Movement mm
                     ORDER BY abs(mm.TimeStamp - c.TimeStamp)
                     LIMIT 1
                    );

您可能需要使用timestampdiff()代替-,具体取决于列的类型。