2

このようなテーブルがあります

イベント ID | 契約ID | イベント日 | 金額 |
----------------------------------------------
1 | 1 | 2009-01-01 | 100 |
2 | 1 | 2009-01-02 | 20 |
3 | 1 | 2009-01-03 | 50 |
4 | 2 | 2009-01-01 | 80 |
5 | 2 | 2009-01-04 | 30 |

コントラクトごとに、最新のイベントとイベントに関連付けられた金額を取得し、次のようなものを取得する必要があります

イベント ID | 契約ID | イベント日 | 金額 |
----------------------------------------------
3 | 1 | 2009-01-03 | 50 |
5 | 2 | 2009-01-04 | 30 |

データを正しくグループ化する方法がわかりません。何か案は?

前もって感謝します。

4

1 に答える 1

8

SQL 2k5 / 2k8:

with cte_ranked as (
 select *
    , row_number() over (
         partition by ContractId order by EvantDate desc) as [rank]
    from [table])
select * 
   from cte_ranked
   where [rank] = 1;

SQL 2k:

 select t.*
    from table as t
    join (
        select max(EventDate) as MaxDate
            , ContractId 
            from table 
            group by ContractId) as mt
       on t.ContractId = mt.ContractId
          and t.EventDate = mt.MaxDate
于 2009-06-16T11:14:25.243 に答える