2

私はこのようなテーブルを持っています:

ID | username | domain | operation| datetime 
---+----------+--------+----------+--------------------
1  | john     | depA   | 'login'  | 2012-09-22 13:00:00
2  | mary     | depA   | 'login'  | 2012-09-22 13:10:00
3  | john     | depA   | 'login'  | 2012-09-24 13:25:00
4  | john     | depA   | 'logout' | 2012-09-24 13:55:00

(SELECT DISTINCT)過去20時間(日時)の最後の操作がログイン(最後までにログアウトしなかった)であるすべての「ユーザー名、ドメイン」を取得したいと思います。

アイデアは、「現在セッションに参加しているすべてのユーザー」を取得することです。

結果を1つのクエリで処理したいのですが。

何かアイデアはありますか?T-SQLだけで結果を得る方法が見つかりませんでした。

4

2 に答える 2

2

共通テーブル式を使用して日付をフィルターで除外し、クエリで2回使用して、各ユーザーの最新のアクティビティを取得できます。

;WITH RecentLogins AS
(SELECT username, operation, logdate
FROM logins
WHERE logdate >= DATEADD(hh, -20, GETDATE()))

SELECT r1.* 
FROM RecentLogins r1
WHERE logdate = (
    SELECT MAX(logdate) 
    FROM RecentLogins r2
    WHERE r1.username = r2.username AND r1.domain = r2.domain)
AND operation = 'login'
于 2012-09-24T23:31:11.463 に答える
0

このDATEADD関数を使用して、負の数を使用することができます。

SELECT DISTINCT username, domain FROM table_name
WHERE operation = 'login' AND datetime >= DATEADD(Hour, -20, CURRENT_TIMESTAMP)
于 2012-09-24T22:49:23.570 に答える