如何从driverid Sql server获取倒数第二条记录

时间:2016-08-24 10:03:34

标签: sql-server sql-server-2008 sql-server-2008-r2

我有以下我在DriverID“134”中有三条记录我想要第二个最后数据这个人如何帮助我如何获得倒数第二个数据 和 你可以帮我解决一下如何从我的表中输入数据,每隔一个记录排序一个驱动程序 enter image description here

1 个答案:

答案 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)