找到最接近的时间戳 SQL?
Find the closest timestamp SQL?
我有两个表格如下所示:
通讯:(拨打电话)
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)。
我的问题是,它只是 return 最接近的 movement timestamp
,即 在 某个 communication timestamp
之后。例如,给出这个简单的例子:
Communication Time:
1:10 pm
Movement Data:
1:09 pm (100,100)
1:15 pm (200,200)
查询将 return 1:15pm (200,200)
,即使最近的 timestamp
是 1:09 下午。我将如何编写 sql 查询来查找最近的时间?我为 sql-server
找到了一个有点相似的 SO post,但我如何在 MySQL
中做到这一点?
我只是在 SQL 方面没有太多经验,所以非常感谢帮助!!!
我想你想要这个版本:
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()
而不是 -
。
我有两个表格如下所示:
通讯:(拨打电话)
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)。
我的问题是,它只是 return 最接近的 movement timestamp
,即 在 某个 communication timestamp
之后。例如,给出这个简单的例子:
Communication Time:
1:10 pm
Movement Data:
1:09 pm (100,100)
1:15 pm (200,200)
查询将 return 1:15pm (200,200)
,即使最近的 timestamp
是 1:09 下午。我将如何编写 sql 查询来查找最近的时间?我为 sql-server
找到了一个有点相似的 SO post,但我如何在 MySQL
中做到这一点?
我只是在 SQL 方面没有太多经验,所以非常感谢帮助!!!
我想你想要这个版本:
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()
而不是 -
。