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 1します。SELECT TOP 1 b.LogonDate

編集:TOP 1 MS SQL Serverを指摘してくれた @JYelton に感謝します。ORDER BY b.LogonDate ASC

于 2010-08-05T20:09:07.557 に答える
0

分析機能で可能です。どの DBMS を使用しているかはわかりませんが、Oracle と SQL Server でもできると思います。私はOracleで一度それをしました。ここでそれを説明する優れた側面があります。この分析関数が必要なときはいつもそこに行きます(通常はむしろRANKです)。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 に答える