2011-01-17 3 views
3

私は、SQL Server 2008で次のためにSELECT文を書いて少しの助けが必要です。例えば(それぞれユニークな、ProductIDの年の組み合わせの場合(例えば、テーブル)クイックヘルプ

Date      ProductID      Year      Price 
    01-01-10     01        2009      1.00 
    02-01-10     01        2009      2.00 
    03-01-10     01        2010      3.00 
    04-01-10     01        2010      4.00 
    05-01-10     01        2011      5.00 
    06-01-10     01        2011      6.00 
    01-01-10     02        2009      1.00 
    02-01-10     02        2009      2.00 
    03-01-10     02        2010      3.00 
    04-01-10     02        2010      4.00 
    05-01-10     02        2011      5.00 
    06-01-10     02        2011      6.00 
    01-01-10     03        2009      1.00 
    02-01-10     03        2009      2.00 
    03-01-10     03        2010      3.00 
    04-01-10     03        2010      4.00 
    05-01-10     03        2011      5.00 
    06-01-10     03        2011      6.00 
    01-01-10     04        2009      1.00 
    02-01-10     04        2009      2.00 
    03-01-10     04        2010      3.00 
    04-01-10     04        2010      4.00 
    05-01-10     04        2011      5.00 
    06-01-10     04        2011      6.00 

を01- 2009、03-2011)、私は最新の日付でラインをつかむ必要があります。実際のデータはあまり整理されておらず、01-2009のレコードは1件、03-2009のレコードは15件しかない可能性があります。

私はDENSE RANKを使用するために持っていると思うが、私はよく分かりません。

答えて

6

row_numberは、あなたのニーズに十分なものでなければなりません。

注:私はあなたの日付の列が真日付またはDateTimeデータ型ではなく、あなたが示されてきた形式の文字列であると仮定しています。その前提が間違っている場合は、日付をソート可能な形式に変換するために、追加の文字列操作が必要になります。

;with cteRowNumber as (
    select Date, ProductID, Year, Price, 
      row_number() over (partition by ProductID, Year order by Date desc) as RowNum 
     from YourTable 
) 
select Date, ProductID, Year, Price 
    from cteRowNumber 
    where RowNum = 1 
+0

うん!それはトリックでした!ありがとうジョー! – Ray

関連する問題