0

スクリーンショットに見られるように、多数の車両の使用状況が記録されるアプリケーションを作成しました。

アプリケーションに記録されている移動以外に車両を使用するべきではないため、個々の使用間のギャップ (マイル単位) のレポートを生成したいと考えています。

その特定の車について、現在の記録がオドメーターを開始するとき (前の記録のエンド オドメーターが 0 より大きい数値を生成するとき) にギャップが発生します。異なる色の円を参照してください。SQLでこれを達成するにはどうすればよいですか? 私はオラクル(11g)を使用していますが、SQLは似ていると思います。ありがとうございました。

出力例:

  Vehicle V06
  Invoice Date   Dest   Gap 
  123     1/2/14 York   14.0
  122     1/1/14 Pburg   0.0
  Vehicle V05
  Invoice Date   Dest   Gap 
  121     1/3/14 Mill    0.0

車両使用データベース
* ギャップを含むテスト データを使用する必要があったことは認識していますが、実際にはこれらはまれなはずです。このような場合には、

  Invoice 67189 would have End Od of 92590 resulting in a GAP of 3.0 miles for 67190
4

2 に答える 2

2

使用するだけlag()です:

select vu.*
from (select vu.*,
             lag(endod) over (partition by vehicle order by date) as prev_endod
      from vehicleusage vu
     ) vu
where begod <> prev_endod;

値の比較は失敗することに注意してください。そのNULLため、車両の最初の記録には問題はありません。

于 2014-11-05T16:43:48.330 に答える
0
 SELECT 
    D1.invoiceNo, 
    D1.vehicalId, 
    CASE WHEN D1.odBeg > D0.odEnd THEN 'MISSING MILES' ELSE 'EXTRA MILES' END AS Notes
 FROM
    (SELECT vehicalId,invoiceNo, RANK() OVER(PARTITION BY vehicalId ORDER BY dateUsed) AS KEY_CUR, odBeg,odEnd FROM @DATA) AS D0
    INNER JOIN 
    (SELECT vehicalId,invoiceNo, RANK() OVER(PARTITION BY vehicalId ORDER BY dateUsed) - 1 AS KEY_LAST, odBeg,odEnd FROM @DATA) AS D1
    ON D0.vehicalId = D1.vehicalId AND D0.KEY_CUR = D1.KEY_LAST
 WHERE
    D1.odBeg <> D0.odEnd
于 2014-11-05T15:42:22.190 に答える