答案 0 :(得分:2)
使用Row_Number()
窗口功能
With cte as
(
select *,Row_Number()over(order by Transdate desc) as Rn from yourtable
Where DriverID = 134
)
Select *
from cte
Where Rn = 2
要处理只有一条记录给予DriverID
,请使用此
With cte as
(
select *,Row_Number()over(order by Transdate desc) as Rn,
count(1)over() as cnt from yourtable
Where DriverID = 134
)
Select *
from cte
Where (Rn = 2 and cnt > 1) or (Rn = 1 and cnt = 1)
注意:如果最后一条记录中存在平局并且您想要两条记录,则使用DENSE_RANK
代替ROW_NUMBER
更新:
要查找所有 DriverID's
的第二个最后一条记录,请在Row_number
中添加分区,并从DriverID
子句中删除Where
With cte as
(
select *,Row_Number()over(Partition by DriverID order by Transdate desc) as Rn,
count(1)over(Partition by DriverID) as cnt from yourtable
)
Select *
from cte
Where (Rn = 2 and cnt > 1) or (Rn = 1 and cnt = 1)