車両の毎週の Hobbs アワー メーターの読み取り値を入力するために使用するテーブルがあります。一定期間に各車両で使用された合計時間を合計できる必要があります。私が抱えている問題は、メーターが故障すると交換され、プログラムできない新しいメーターに置き換えられることがあり、ゼロ時間に開始する必要があるため、各メーターの読み取り値をループして、メーターがあったかどうかを判断する必要があります。スワップされ、コードでそれを説明します。私はカーソルがあまり好きではありませんが、誰かが試してみるべきより良い解決策を持っていない限り、動作するストアド プロシージャを作成するためにカーソルを使用する必要があるかもしれません。CTE が役立つ方法を考えようとしていますが、まだ何もありません。
テーブル構造は次のとおりです。
ReadingDate Datetime
EquipmentId Int
MeterReading decimal(18,2)
累積変数の作成を計画しており、カーソル内の行をループして、読み取り差を変数に追加します。そのため、ループしてメーターの読み取り値が以前の読み取り値よりも小さいことを確認すると、メーターを交換する必要があり、それを考慮する必要があります。次の読み取り値を先読みして、それが現在よりも低い場合は、合計アクションを 1 回スキップして、その差を累積変数に追加し始めると考えています。これを行うより良い方法はありますか?ありがとう。