所以我的数据库中有两个表,它们看起来都是这样的:
通讯:(拨打电话)
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
movement.timestamp,
movement.x,
movement.y
FROM movement
WHERE (movement.IDNumber=789 AND movement.timestamp>='2012-03-02 07:02:12')
ORDER BY movement.timestamp LIMIT 1;
输出将是:
timestamp x y
2012-03-02 07:02:12 39 52
我设置的地方IDNumber
and timestamp
to the FromIDNumber
呼叫者的,以及timestamp
他们打了电话。因此,这将找到一个呼叫者的可能位置。
在这种情况下,789
打电话给07:02:12
,他的运动数据位于07:02:16
上面说他的位置是(39,52)
。所以这将显示为他可能的位置,因为仅过了 4 秒。
但是,如何为通信表中的每个调用运行特定查询,而不必手动填写每个调用呢?
例如,不是只计算 1 次呼叫,而是针对通信表的所有行计算位置,如下所示:
timestamp x y
2012-03-02 07:02:12 39 52
2012-03-02 03:15:14 23 34
2012-03-02 05:06:07 34 55
2012-03-02 02:41:21 12 56
...
等等。
我尝试使用一些东西java.sql https://docs.oracle.com/javase/7/docs/api/java/sql/package-summary.html但事情变得有点复杂,我想知道是否有更简单的方法。我该如何解决这个问题?
问题是我刚刚开始学习 SQL,所以我根本不知道在这里做什么。我看了一些其他的SO帖子,但它们都是针对sql-server的,我不太能理解。任何帮助将不胜感激,谢谢!