2011-01-03 1 views
2

2つのテーブルがあります。TSQL列の値が最後に変更されたときにテーブルから行の詳細を取得するクエリ

表1

Item 
    1 
    2 

表2

Item Date Amount 
    1  12/31  30 
    1  12/30  30 
    1  12/29  20 
    2  12/31  100 
    2  12/30  90 
    2  12/29  90 

今私の結果は

Item Date Amount 
    1 12/29  20 
    2 12/30  90 
    3 12/31  12 

は基本的に、私は価格が最近変更されたときに日付を見つけるためにしようとしていたはず。次に、この情報を使用して、アイテムが現在の価格である日数を計算します。

おかげ

+1

を返しますか? –

+0

前日同様の質問をしました。 http://stackoverflow.com/questions/4583488/tsql-query-to-fetch-row-details-of-a-table-having-the-maximum-value-for-a-column/4583518#4583518 – Chandu

+0

@Cyber​​nate :同様ですが、同じではありません。今度は最大値を超えていません - 彼は2番目に最近の値の日付の後にあり、重複した値があります。 –

答えて

0

これを試してください:あなたの例のデータの

SELECT Item, Date, Amount 
FROM 
(
    SELECT 
     T2.Item, 
     T2.Date, 
     T2.Amount, 
     ROW_NUMBER() OVER (PARTITION BY T2.Item ORDER BY T2.Date DESC) rn 
    FROM table2 T2 
    JOIN 
    (
     SELECT Item, Amount 
     FROM 
     (
      SELECT 
       Item, 
       Amount, 
       ROW_NUMBER() OVER (PARTITION BY Item ORDER BY Date DESC) rn 
      FROM table2 
     ) T1 
     WHERE rn = 1 
    ) T3 
    ON T2.Item = T3.Item AND T2.Amount <> T3.Amount 
) T4 
WHERE rn = 1 

結果:

 
Item Date  Amount 
1  2010-12-29 20  
2  2010-12-30 90  

を説明サブクエリT3は、各項目の最も最近の価格を見つけますROW_NUMBERを使用してこれは元のテーブルに戻され、アイテムの価格が最新の価格と等しい行が削除されます。残りのデータの最新の価格は、ROW_NUMBER技法を使用して各アイテムごとに求められます。これは2番目に最近の価格です。

1
;WITH cte 
    AS (SELECT *, 
       Row_number() OVER (PARTITION BY Item ORDER BY Date) - 
       Row_number() OVER (PARTITION BY Amount, Amount ORDER BY Date) AS 
       grp 
     FROM table2) 
SELECT Item, 
     MAX(Amount) AS Amount, 
     MIN(Date) AS startrange, 
     MAX(Date) AS endrange, 
     1+DATEDIFF(DAY,MIN(Date),MAX(Date)) AS numdays 
FROM cte 
GROUP BY grp, 
      Item 

項目= 3から来たテストデータについては、以下の

Item  Amount  startrange endrange numdays 
----------- ----------- ---------- ---------- ----------- 
1   20   2010-12-29 2010-12-29 1 
1   30   2010-12-30 2010-12-31 2 
2   90   2010-12-29 2010-12-30 2 
2   100   2010-12-31 2010-12-31 1 
関連する問題