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

时间:2015-05-23 01:52:06

标签: mysql sql phpmyadmin

所以我的数据库中有两个表,它们看起来像这样:

沟通:(致电)

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

我将IDNumbertimestamp设置为来电者的FromIDNumbertimestamp他们拨打了电话。那么,这将找到一个呼叫者的可能位置。

在这种情况下,78907: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的东西,但事情有点复杂,我想知道是否有更简单的方法。我该如何解决这个问题?

问题是我刚刚开始学习SQL,所以我真的不知道该怎么做。我查看了其他一些SO帖子,但它们都是针对sql-server的,我真的无法理解。非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

试试这个:

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)

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