1

アクセス制御システムに結び付けているデータベースがあります。ユーザーの建物への最初の入場と最後の退場を示すレポートを作成しようとしています。1 人のユーザーに対して適切な単一の結果を得る方法を示すクエリをまとめましたが、これを自動化してユーザーのリストを実行したいと考えています。

1 人のユーザー (現在の状態) の最初のエントリを取得するためのクエリは次のとおりです。

SELECT TOP 1 AccessLog.ID, AccessLog.Date, First(AccessLog.Time) AS FirstOfTime, AccessLog.User, AccessLog.Details, AccessLog.Event, AccessLog.Department, AccessLog.Where
FROM AccessLog
GROUP BY AccessLog.ID, AccessLog.Date, AccessLog.User, AccessLog.Details, AccessLog.Event, AccessLog.Department, AccessLog.Where
HAVING (((AccessLog.Date)=#DATE#) AND ((AccessLog.User)="USERNAME") AND ((AccessLog.Where)="Front Door (In)"))
ORDER BY First(AccessLog.Time);

私はすべてのユーザー名の別のテーブルを持っています。

基本的に私は完全な Access n00b です。以前は PHP と繰り返し関数を使用してこれを行っていましたが、Access 内でこれを実現するのはかなり簡単ですよね? どんな助けでも大歓迎です。

4

1 に答える 1

0

次のクエリを使用して、日付ごとにすべてのユーザーの到着時刻のリストを取得できます。「ArriveTimes」という名前でクエリ定義を保存します。

SELECT AccessLog.Date, AccessLog.User, Min(AccessLog.Time) AS ArriveTime
FROM AccessLog
WHERE (((AccessLog.Where)="Front Door (In)"))
GROUP BY AccessLog.Date, AccessLog.User;

同様に、「DepartTimes」として保存された同様のクエリで出発時刻を取得できます。

SELECT AccessLog.Date, AccessLog.User, Max(AccessLog.Time) AS DepartTime
FROM AccessLog
WHERE (((AccessLog.Where)="Front Door (Out)"))
GROUP BY AccessLog.Date, AccessLog.User;

次に、[ArriveTimes] クエリと [DepartTimes] クエリを結合し ([Date] と [User] で結合)、[AccessLog] テーブルの 2 つのインスタンスで結合して ([Date] で結合し、[ユーザー]、および [時間]):

SELECT ArriveTimes.Date, ArriveTimes.User, 
    ArriveTimes.ArriveTime, AccessLog_A.Details AS ArriveDetails, 
    DepartTimes.DepartTime, AccessLog_D.Details AS DepartDetails
FROM 
    (AccessLog AS AccessLog_A INNER JOIN 
        (ArriveTimes INNER JOIN DepartTimes 
            ON (ArriveTimes.User = DepartTimes.User) 
                AND (ArriveTimes.Date = DepartTimes.Date)
        ) 
        ON (ArriveTimes.ArriveTime = AccessLog_A.Time) 
            AND (AccessLog_A.User = ArriveTimes.User) 
            AND (AccessLog_A.Date = ArriveTimes.Date)
    ) 
    INNER JOIN AccessLog AS AccessLog_D 
        ON (DepartTimes.DepartTime = AccessLog_D.Time) 
            AND (DepartTimes.User = AccessLog_D.User) 
            AND (DepartTimes.Date = AccessLog_D.Date);
于 2013-03-11T13:17:30.393 に答える