有人可以告诉我如何使用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的员工
答案 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)