【问题标题】:how to get second last record from driverid Sql server如何从 driverid Sql 服务器获取倒数第二个记录
【发布时间】:2016-08-24 10:03:34
【问题描述】:

我在下面有以下我在 DriverID“134”中有三个记录我想要倒数第二个数据如何这个任何人帮助我如何获取倒数第二个数据 和 你能帮我如何从我的表中提取数据,每隔一秒最后一条记录排序多于一个驱动程序ID

【问题讨论】:

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


    【解决方案1】:

    使用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)
    

    【讨论】:

    • 你比我快... +1 但是:您可以使用
    • @Shnugo - 是的,你是对的。相应地更新了答案。我们不能使用 DriverID 有超过 1 条记录时,它会提取两条记录。
    • 你能帮我如何从我的表中获取数据,每隔一个最后一条记录排序超过一个驱动程序ID
    • @AddiKhan - 检查最后一个查询
    • 谢谢亲爱的:)老板:)
    【解决方案2】:
      SELECT * FROM (
      SELECT
     ROW_NUMBER() OVER (ORDER BY key DEC) AS rownumber,
     columns
     FROM tablename
     ) AS foo
     WHERE rownumber <= 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 2018-05-04
      • 2021-07-31
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多