2

時間の経過とともに位置を追跡するテーブルを入手しました。このテーブルには多くの行が含まれており、形式を変更することはできません。すべての位置には、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 

位置の座標は関数getXを介して利用できgetY、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    

だから今私の問題は前の行との差を計算する方法です。重要なのは、テーブルに多くの行があるため、非効率的な計算が実行される前に、結果セットが外部キーに絞り込まれることです。

4

1 に答える 1

-1

提案に感謝しますが、これは複雑で非効率的であるため、現在別のソリューションを使用しています。上で述べたように、ソーステーブルの形式を変更することはできません。しかし、可能なことは、新しい行を挿入する前に差を計算するように、この追跡テーブルに書き込んでいたトリガーを変更することでした。

もちろん、これは既存のエントリでは機能しませんが、許容されます。

于 2012-09-08T09:53:36.633 に答える