メインテーブルの変更を記録する履歴テーブルを持つSQL Server 2008データベースがあります。私は、 'レート'列の現在(最新)の値と、最新とは異なる最新の前の値を報告する必要があります。私が生産したい履歴テーブルの列の現在と前の値を比較するSQLクエリ
id | rate | uninteresting | updated_on | version
-----+--------+---------------+--------------+----------
123 | 1.20 | foo | 2010-10-18 | 1500
456 | 2.10 | bar | 2010-10-12 | 2123
123 | 1.20 | baz | 2010-10-10 | 1499
123 | 1.10 | baz | 2010-10-08 | 1498
456 | 2.00 | bar | 2010-10-11 | 2122
123 | 1.00 | baz | 2010-08-01 | 1497
456 | 2.00 | quux | 2010-10-05 | 2121
456 | 1.95 | quux | 2010-09-07 | 2120
:
だから、のようなものを与えられた私はレートが最新のエントリと異なっている最新のエントリを探しています
id | cur_rate | cur_ver | updated_on | prev_rate | prev_ver | prev_updated
-----+----------+---------+------------+-----------+----------+-------------
123 | 1.20 | 1500 | 2010-10-18 | 1.10 | 1498 | 2010-10-08
456 | 2.10 | 2123 | 2010-10-12 | 2.00 | 2122 | 2010-10-11
注意。
私はさまざまなアプローチを試しましたが、結果が多すぎるか、まったくないかのいずれかです。助言がありますか?
迅速な対応がありがとうございますが、これに問題があります。私は 'rn'以外の '(select row_number()over()as ...)'で指定されたすべての列に対して' invalid column name 'を取得します。もちろん、私がこの例で与えた名前は、私のDBの列と正確には一致しませんが、値を置き換えて何度も渡しました。私は正しい表と列の名前を持っていると確信しています。私はまた '(rn = row_number()を超えて(パーティション...)、id、rate、...)'と同じ問題を再構築しました。 – Val
これは彼に前回のレート**現在のものとは異なる**を表示しませんでした**ちょうど2番目に新しいレート – JNK
+1の編集 – JNK