簡體   English   中英

Microsoft access 中的考勤查詢

[英]Time Attendance query in Microsoft access

我在 Microsoft Access 中編寫查詢時遇到問題。 這就是我的表的樣子以及我想從哪里檢索數據:

我想要一個具有以下結果的查詢:

正如您在第一個表中看到的,根據 CHECKTYPE 的用戶可以檢查 IN 'I' 並檢查 OUT 'O' 所以我試圖使用子查詢和 Datediff() 來獲得差異,但我對子查詢概念和通過我無法得到我想要的結果。

您可以使用自加入(獲取任何 Checkin 行的 Checkout 時間); 使用子查詢(如果同一用戶多次簽入/簽出,則刪除多個簽出行)。

這個假設您在表中只有一天的數據,並且它為每個 session(簽入/簽出)打印多行:

SELECT 
    CI.USERID, 
    format(dateadd('n',
            datediff('n', CI.CHECKTIME, CO.CHECKTIME),
             #01/01/1900#),'hh:nn') as HHMM
FROM MyTbl CI
    inner join 
    MyTbl CO
    ON  CO.USERID=CI.USERID
WHERE 
           CO.CHECKTIME >= CI.CHECKTIME
   AND CO.CHECKTYPE = 'O'
   AND CI.CHECKTYPE = 'I'
   AND NOT EXISTS 
       (SELECT *
        FROM MyTbl COO
        WHERE COO.USERID=CO.USERID
             AND COO.CHECKTIME>=CI.CHECKTIME
             AND COO.CHECKTYPE='O'
             AND COO.CHECKTIME < CO.CHECKTIME
        );

添加到 1900-01-01 是為了將找到的分鍾轉換為日期時間值,以便我可以使用格式 function 以您想要的格式顯示。

謝謝大家,我得到了答案:

 Select  (B.Name),FORMAT(C.CHECKTIME,'hh') - FORMAT(A.CHECKTIME,'hh') AS TOTAL  from(
[CHECKINOUT] AS A
INNER JOIN [USERINFO] AS B ON A.USERID=B.USERID  )
INNER JOIN [CHECKINOUT] AS C ON B.USERID=C.USERID where A.CHECKTYPE='I' and C.CHECKTYPE='O' AND FORMAT(A.CHECKTIME,'yyyy-mm-dd') LIKE '%2022-07-01%' AND FORMAT(C.CHECKTIME,'yyyy-mm-dd') LIKE '%2022-07-01%'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM