按记录分组然后从每个组中获取最后一个升序排序记录?

时间:2012-05-20 19:03:41

标签: sql sql-server sql-server-2008 tsql sql-server-2005

我有一张桌子:

| P_id | Month |  Year  |  Name  |
   624     09     2009    Test1
   600     10     2010    Test2
   624     10     2010    Test6
   600     09     2011    Test7
  1. 我想按P_id降序,Year升序,然后Month升序

  2. 订购我的表格
  3. 根据订单,我想要每个P_id的最后一条记录。

  4. 运行第1步后:

    | P_id | Month |  Year  |  Name  |
      624     09      2009    Test1
      624     10      2010    Test6
      600     10      2010    Test2
      600     09      2011    Test7
    

    期望的输出:

    | P_id | Month |  Year  |  Name  |
       624     10     2010    Test6
       600     09     2011    Test7
    

1 个答案:

答案 0 :(得分:3)

您可以使用row_number

select  *
from    (
        select  row_number() over (
                  partition by p_id
                  order by year desc, month desc) as rn
        ,       *
        from    YourTable
        ) as SubQueryAlias
where   rn = 1

子查询是必需的,因为您无法在row_number子句中直接使用where