【发布时间】:2016-08-24 10:03:34
【问题描述】:
我在下面有以下我在 DriverID“134”中有三个记录我想要倒数第二个数据如何这个任何人帮助我如何获取倒数第二个数据 和 你能帮我如何从我的表中提取数据,每隔一秒最后一条记录排序多于一个驱动程序ID
【问题讨论】:
标签: sql-server sql-server-2008 sql-server-2008-r2
我在下面有以下我在 DriverID“134”中有三个记录我想要倒数第二个数据如何这个任何人帮助我如何获取倒数第二个数据 和 你能帮我如何从我的表中提取数据,每隔一秒最后一条记录排序多于一个驱动程序ID
【问题讨论】:
标签: sql-server sql-server-2008 sql-server-2008-r2
使用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
更新:
要查找 all DriverID's 的倒数第二条记录,请在 Row_number 中添加 Partition by 并从 Where 子句中删除 DriverID
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)
【讨论】:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY key DEC) AS rownumber,
columns
FROM tablename
) AS foo
WHERE rownumber <= 2
【讨论】: