计算与前一行数据的差异

时间:2012-08-25 16:38:37

标签: mysql

我有一张跟踪时间位置的表格。此表包含许多行,无法更改格式。 每个位置都插入一个id,实际位置和时间戳(日期时间)。位置本身插入一个连接的字符串,可以使用自定义函数转换为x / y坐标。

我想创建一个过程,并列出所有已知位置及其适当的时间戳。到目前为止没问题。但是也想创建一个输出列,指示位置和时间的差异。

澄清。我有什么:

Id |  Timestamp          | Foreign_Id | POS              
----------------------------------------------------------
1  | 2011-02-20 00:00:00 |     2      | PositionAsString 
----------------------------------------------------------
2  | 2011-02-20 00:00:05 |     2      | PositionAsString 
----------------------------------------------------------
3  | 2011-02-20 00:00:15 |     2      | PositionAsString 
----------------------------------------------------------
4  | 2011-02-20 00:00:37 |     2      | PositionAsString 

位置的坐标可通过函数getXgetY获得,它们返回X和Y的浮点值。 位置差异将使用毕达哥拉斯定理计算,因为它只是2D。

我想要什么

Id |  Timestamp          | Foreign_Id | POS              | DiffPos  | Speed 
---------------------------------------------------------------------------
1  | 2011-02-20 00:00:00 |     2      | PositionAsString |    0     |   0    
---------------------------------------------------------------------------
2  | 2011-02-20 00:00:05 |     2      | PositionAsString |    20    |   4    
---------------------------------------------------------------------------
3  | 2011-02-20 00:00:10 |     2      | PositionAsString |    10    |   2    
---------------------------------------------------------------------------
4  | 2011-02-20 00:00:20 |     2      | PositionAsString |    10    |   1    

所以现在我的问题是如何计算前一行的差异。 重要的是,由于表有很多行,因此执行任何无效的计算时,结果集会缩小到外键。

1 个答案:

答案 0 :(得分:-1)

感谢您的建议,但由于这是复杂而低效的,我现在正在使用另一种解决方案。如上所述,我无法更改源表的格式。但是可能的是修改写入此跟踪表的触发器,以便在插入新行之前计算差异。

这当然不适用于现有条目,但这是可以接受的。