我正试图从这个数据库的下一行抓取一个字段。我可以使用登录时间来确定注销时间,但我还想获取下一次登录时间,以便我也可以确定注销[注销]时间。有什么建议?谢谢
|-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
答案 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 1
:SELECT 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
如果这不符合您的要求,请告诉我(因为我还没有测试过)。然后我会试着去做它的工作。但我非常有信心......如果您的数据库允许语法。