特定のアイテムが特定の場所にいつ発送または返送されたかを記録するテーブルがあり、特定のアイテムが返送されるたびに間隔を計算したいと考えています。
サンプルデータ:
Item ReturnDate:
Item1, 20120101
Item1, 20120201
Item1, 20120301
Item2, 20120401
Item2, 20120601
したがって、この場合、アイテム 1 が最初に返品されるまでに 1 か月のギャップがあり、2 回目に返品されるまでにさらに 1 か月のギャップがあったことがわかります。アイテム2は2か月後に戻ってきました。
私の出発点は次のとおりです。
Select r1.Item, r1.ReturnDate, r2.Item, r2.ReturnDate, DateDiff(m, r1.ReturnDate, r2.ReturnDate)
from Returns r1
inner join Returns r2 on r2.VehicleNo = r1.VehicleNo
ただし、このサンプルでは、各項目は、次の項目だけでなく、それが返された他のすべてのインスタンスと比較されます。したがって、隣接するリターンのみを比較するように、このクエリを制限する必要があります。
1 つの解決策は、各返品にカウント (アイテムが返品された回数) をタグ付けすることです。
Item ReturnDate, ReturnNo:
Item1, 20120101, 1
Item1, 20120201, 2
Item1, 20120301, 3
Item2, 20120401, 1
Item2, 20120601, 2
これにより、次の T-SQL (または同様のもの) を使用できるようになります。
Select r1.Item, r1.ReturnDate, r2.Item, r2.ReturnDate, DateDiff(m, r1.ReturnDate, r2.ReturnDate)
from Returns r1
inner join Returns r2 on r2.VehicleNo = r1.VehicleNo
and (r1.ReturnNo + 1 = r2.ReturnNo)
私の最初の質問は、これが賢明で最適なアプローチなのか、それともより良いアプローチがあるのかということです。
次に、ReturnNo を計算する最も簡単で巧妙な方法は何ですか?