在SQL中抓取下一行

时间:2010-08-05 19:46:50

标签: sql row next

我正试图从这个数据库的下一行抓取一个字段。我可以使用登录时间来确定注销时间,但我还想获取下一次登录时间,以便我也可以确定注销[注销]时间。有什么建议?谢谢

|-LogonDate---|-PersonID-|-LoggedOnTime---|   
|5/30 12:00pm |100       |3600            | 
|5/30 01:00pm |100       |3430            |
|5/30 03:30pm |100       |3000            |

SELECT PersonID, LogonDate, LoggedOnTime
FROM Agent_Logout

2 个答案:

答案 0 :(得分:1)

您可以使用子选择来获取下一个LogonDate,然后确定它们之间的差异。

SELECT
    a.PersonID,
    a.LogonDate,
    a.LoggedOnTime,
    (SELECT b.LogonDate
     FROM Agent_Logout AS b
     WHERE b.LogonDate > a.LogonDate
     ORDER BY b.LogonDate ASC
     LIMIT 1) AS NextLogonDate
FROM Agent_Logout AS a

如果使用MS SQL Server,请删除LIMIT 1并在此处添加TOP 1SELECT TOP 1 b.LogonDate

编辑:感谢@JYelton为MS SQL Server指出TOP 1,感谢ORDER BY b.LogonDate ASC

答案 1 :(得分:0)

可以使用分析功能。不知道你使用哪个DBMS,但Oracle和我认为SQL Server也可以这样做。我在Oracle做过一次。有一个很好的方面解释它here当我需要这个分析函数时,我总是去那里(通常是RANK)。您需要一个名为LEAD的功能。我认为它会像这样工作:

SELECT PersonID, LogonDate, LoggedOnTime
       LEAD(LoggedOnTime, 1, 0) OVER (PARTITION BY PersonID ORDER BY LogonDate, LoggedOnTime)
FROM Agent_Logout

如果这不符合您的要求,请告诉我(因为我还没有测试过)。然后我会试着去做它的工作。但我非常有信心......如果您的数据库允许语法。