間の値を計算する必要がとき:一般的なアプローチで、次の表の行
Id Timestamp AssignedTo
1 2012-01-01 User1
2 2012-01-02 User2
3 2012-01-10 User3
4 2012-01-15 User1
エンティティが割り当てられた日数/時間/分の計算にMS SQL Serverで一般的なアプローチどうなりますか特定のユーザーですか?
開発者(基本的なSQLの知識を持っている)として、私はこれらの種類のクエリを実行するときに、常に関数またはストアドプロシージャを選択しました(これらの種類=クエリはセット内の2つの行の違いに基づいて結果を含みます)。
この例では、カーソルをアイテム上で繰り返し、前の変数を変数に保存して差を計算します。しかし、私はこれが重大なパフォーマンス上の懸念であると言われています。特に大きなセットではそうです。
EDIT:サンプル結果すなわちアイテムを特定のユーザに割り当てられた総時間
User TotalTime
User1 23d
User2 8d
User3 5d
。 User1のTotalTimeは、割り当てられた最初の日とともに、2012-01-15(今は2012年2月6日)から割り当てられているため、23日間です。
データベースによっては、高度なSQL機能を使用することができるため、どのようなデータベースですか?また、いくつかの出力例を提供できますか?どのような結果が期待できるのかよくわかりません... –
サンプルデータとMSSQL DBMSが追加されました。 – grimstoner
MSSQL/SQL Serverがひどいので、 '' ROWS 1 PRECEDING'やそれに類するウィンドウ関数の構造を使うことはできません。しかし、ここでこの質問をチェックすると、同様の問題に対する答えが含まれます:http://stackoverflow.com/questions/860966/calculate-a-running-total-in-sqlserver –