2009-04-28 6 views
0

私は、休暇用のSQLクエリを実行中であることを認識していません。
ログイン/ログを記録するAccessデータベースに基づいて、Fire Registerレポート(ビル内にいる人の数)いくつかのメタデータと共にログアウトイベント。 アクセスDBは、次のようになります。火災記録のレポートを生成する

 
+----+---------------------+---------+---------+------+ 
| id | date    | action | success | user | 
+----+---------------------+---------+---------+------+ 
| 1 | 2009-04-28 02:00:00 | login |  1 | Nick | 
| 2 | 2009-04-28 03:00:00 | logout |  1 | Nick | 
| 3 | 2009-04-28 04:00:00 | login |  1 | Nick | 
| 4 | 2009-04-28 04:00:00 | logout |  1 | Nick | 
| 5 | 2009-04-28 04:00:00 | login |  1 | Nick | 
| 6 | 2009-04-28 07:00:00 | login |  1 | John | 
| 7 | 2009-04-28 07:30:00 | login |  1 | Sue | 
| 8 | 2009-04-28 08:00:00 | logout |  1 | John | 
+----+---------------------+---------+---------+------+ 

日中は複数のログイン/ログアウト・アクションが存在することができます。 管理者がレポートを実行すると、現在の日のみに制限されており、このユーザーの最後の既知の操作がloginおよび成功= 1のすべてのユーザーをリストする必要があります。

上記のデータでは、ニックスーは、まだ建物内にあると指摘されなければなりません。

+0

、彼らは失敗したログインが続くログインの成功を持っている場合、彼らはまだ建物の中にあると想定されなければなりません?彼らはすべきだと思われますが、あなたの質問の文言は100%明確ではありません。 –

答えて

1

問題に対する別のアプローチは:

SELECT 
    T1.user 
FROM 
    Some_Table T1 
LEFT OUTER JOIN Some_Table T2 ON 
    T2.user = T1.user AND 
    T2.success = 1 AND 
    T2.date > T1.date 
WHERE 
    T1.success = 1 AND 
    T1.action = 'login' AND 
    T2.id IS NULL 

これは、あなただけの成功の行動を気にすることを前提としています。また、ユーザーが同じEXACT日付と時刻に2つのアクションを持つ場合、期待どおりに動作しない可能性があります。

0

**オリジナル

SELECT  f.[User], la.MostRecent, f.[action] 
FROM   
(
    SELECT 
     MAX(ID) AS MaXID, 
     MAX(Date) MostRecent, 
     success, 
     [USER] 
    FROM   
     Fire 
    WHERE 
     Success = 1 
    GROUP BY 
     success, [USER] 
) AS la 
JOIN Fire f 
    ON la.MaxID = f.ID 
WHERE  ([action] = 'login') 
0

で申し訳ありませんタイプミスはこれがSQLで動作しますが、あなたはAccessで、それを試してみなければならないと思います。

select * 
from events e1 
where action = login 
     and success = 1 
     and date = (select max(date) from events e2 where e1.user = e2.user) 
0

これは、IDが常に正の数で増分され、一意であることを前提としています。

SELECT LogTable.* 
FROM LogTable 
INNER JOIN (Select User, Max(ID) AS LastID 
        FROM LogTable 
        GROUP BY LogTable.User 
       ) as LastLog 
ON LogTable.User = LastLog.User 
      AND LogTable.ID = LastLog.LastID 
WHERE LogTable.success = 1 AND LogTable.action = 'login'; 

仮定に基づいて、一意ではないdatetimeについて心配する必要はありません。

ホープの人がログインしていない他の人のためのオープンドアを保持する習慣になっていない。

関連する問題