一尘不染

如何为表中的每一行运行特定的sql查询?

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 
      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和设置timestamp到的FromIDNumber位置,然后timestamp他们拨打了电话。因此,这将找到一个呼叫者的可能位置。

在这种情况下,789打电话到07:02:12,并且他的移动数据07:02:16表明他的位置在(39,52)。这样一来,它就会显示在他可能的位置,因为只有4秒钟之后。

但是,如何对Communication表中的每个呼叫运行该特定查询,而不必手动填写每个查询?

例如,然后,将为通信表的所有行计算位置,而不是仅针对一次呼叫进行计算,例如:

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一起使用,但是事情变得有些复杂,我想知道是否有更简单的方法。我该如何解决这个问题?

问题是我刚刚开始学习SQL,所以我真的不确定在这里做什么。我看了一些其他的SO帖子,但它们全都用于sql-
server,而我却真的听不懂。任何帮助将不胜感激,谢谢!


阅读 144

收藏
2021-03-08

共1个答案

一尘不染

试试这个:

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)

您可以使用SQL Fiddle 来测试不同的数据组合。

2021-03-08