如何为 table 中的每一行 运行 特定的 sql 查询?
How to run a specific sql query for every row in the table?
所以我的数据库中有两个 table,它们看起来都像这样:
通讯:(拨打电话)
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
我想做的是找到最接近给定通信时间戳的移动时间戳。基本上,我想找到一个人在 he/she 打电话时可能去的地方。
目前,我是这样做的:
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 秒后出现。
但是我如何 运行 通信 table 中每个调用的特定查询,而不必手动填写每个调用?
例如,不是只为 1 个呼叫计算位置,而是为通信的所有行计算位置 table,例如:
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 的,我真的无法理解。任何帮助将不胜感激谢谢!
试试这个:
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 来测试不同的数据组合。
所以我的数据库中有两个 table,它们看起来都像这样:
通讯:(拨打电话)
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
我想做的是找到最接近给定通信时间戳的移动时间戳。基本上,我想找到一个人在 he/she 打电话时可能去的地方。
目前,我是这样做的:
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 秒后出现。
但是我如何 运行 通信 table 中每个调用的特定查询,而不必手动填写每个调用?
例如,不是只为 1 个呼叫计算位置,而是为通信的所有行计算位置 table,例如:
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 的,我真的无法理解。任何帮助将不胜感激谢谢!
试试这个:
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 来测试不同的数据组合。