2

我有一张这样的桌子

事件 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 | 合同编号 | 活动日期 | 金额 |
----------------------------------------------
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 回答