如何为SQL Server中的每个分区选择max rownumber

时间:2016-11-24 16:46:15

标签: sql sql-server max rows

有人可以告诉我如何使用CTE为SQL Server中的每个分区选择最大行数。

假设任何员工有4个交易行而另一个只有一行,那么如何为这些员工选择最大行。

我有工作表我想获取员工的最大行号以获取该员工的最新交易 我试过跟随

With CTE as (
Select 
My fields,
Rownum = row_number() over(partition by emplid order by date) from jobtable
Where 
Myconditions
)
Select *  from CTE  B left outer join 
CTE A on A.emplid  = B.emplid 
Where 
A.rownum = (select max(a2.rownum) from jobtable a2)

上面是否需要左连接或者根本不需要? 如果任何员工只有1行存在,请告诉我如何获取rownum,因为上述查询仅获取整个表中具有最大rownum的员工

1 个答案:

答案 0 :(得分:2)

With CTE as (
    Select
       My fields,
       Rownum = row_number() over(partition by emplid order by date DESC)
    from jobtable
    Where 
       Myconditions
)

SELECT *
FROM
    cte
WHERE
    RowNum = 1

只需反转ROW_NUMBER的顺序,然后选择它等于1的位置。行号可以是升序(ASC)或降序(DESC)。因此,如果您希望最近的日期获得最新记录ORDER BY date DESC,如果您希望获得最早的记录,则可以选择ORDER BY date ASC (or date)