1

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

|-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
4

2 回答 2

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 指出TOP 1MS SQL Server,并且ORDER BY b.LogonDate ASC

于 2010-08-05T20:09:07.557 回答
0

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

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

让我知道这是否无法按您的意愿工作(因为我尚未对其进行测试)。然后我会努力让它发挥作用。但我非常有信心......如果您的数据库允许语法。

于 2010-08-05T20:33:11.023 回答