3

2 つの時間の違いを見つけるために、MS Access で次のクエリを実行しようとしています。時刻形式は、例えば、開始時刻 8:00、終了時刻 14:00 です。しかし、クエリでエラーが発生しました。修正するのを手伝ってください。

PARAMETERS [Enter Date] DateTime;

SELECT
    M.CompanyID AS Emp_ID,
    MIN(H.EventTime) AS Attending,
    MAX(H.EventTime) AS Leaving,
    Format( (Leaving-Attending), "hh:mm:ss") AS TotalHrs
FROM
    Member AS M
    LEFT JOIN History AS H ON M.UserID = H.EventUserID 
    AND
    ( Format( [EventDate], "dd/mm/yyyy" ) ) = [Enter Date]    
WHERE
    companyId NOT IN (select companyid from exceptions)
GROUP BY
    M.CompanyID, EventDate
ORDER BY
    CompanyId;

アイハ

4

2 に答える 2

3

そのほとんどをSELECTサブクエリに移動できます。次に、親クエリから、サブクエリで定義された名前を使用して、LeavingそれらAttendingの差を計算することができます。

PARAMETERS [Enter Date] DateTime;
SELECT
    sub.Emp_ID,
    sub.Attending,
    sub.Leaving,
    Format((sub.Leaving - sub.Attending), "hh:mm:ss") AS TotalHrs
FROM
    (
        SELECT
            M.CompanyID AS Emp_ID,
            MIN(H.EventTime) AS Attending,
            MAX(H.EventTime) AS Leaving
        FROM
            Member AS M
            LEFT JOIN History AS H
            ON
                M.UserID = H.EventUserID 
            AND Format([EventDate], "dd/mm/yyyy") = [Enter Date]    
        WHERE
            M.companyId NOT IN (select companyid from exceptions)
        GROUP BY
            M.CompanyID, EventDate
    ) AS sub
ORDER BY sub.Emp_ID

重い作業のほとんどはサブクエリ内で行われます。親クエリは単にサブクエリの値を取得し、値のペアを減算するだけなので、この提案によってパフォーマンスが大幅に低下することはありません。

于 2013-07-24T21:16:40.883 に答える
2

退出と出席には、クエリが完了するまで値がありません。したがって、Jet がクエリの SELECT 部分を処理している間、Leaving-Attending は何の意味もありません。TotalHrs の計算では、Attending を MIN(H.EventTime) に、Leaving を MAX(H.EventTime) に置き換える必要があります。

于 2013-07-24T20:05:41.003 に答える