1. Về tính chênh lệch thời gian:
Các trường thời gian của bạn là ổn roài nhưng cái trường Duration chưa ổn, kiểu dữ liệu là Shortime mới đúng và bạn chỉ đơn giản là làm phép trừ thôi.
SELECT active.EmployeeID, active.timefrom, active.timeto, [timeto]-[timefrom] AS Different, active.Duration
FROM active;
Bạn có thể sử dụng lệnh trừ thời gian nếu định dạng trường là HH:MM
Đây là 1 Query giúp bạn tính được thời gian lân ca (thời gian làm việc trong 1 ca)
SELECT tblShift.ID, tblShift.HHFrom, tblShift.HHTo, tblShift.Different, IIF([HHto]<[HHfrom],[HHto]+24-[HHfrom],[HHto]-[HHfrom]) AS Duration
FROM tblShift;
Vậy việc còn lại bây giờ là thế này: Bạn so sánh thời gian nhận ca để biết lúc họ bắt đầu làm thêm giờ cho đến thời gian cuối cùng.
Chẳng hạn Query sau có thể giúp bạn tính được thời gian làm thêm giờ của một công nhân nhá:
SELECT active.EmployeeID, active.timefrom, active.timeto, tblShift.OverStart, IIf(timefrom>[OverStart],timefrom,[OverStart]) AS StartOvertime, (IIf(timefrom>[OverStart],timefrom,[OverStart])-active.timeto) AS TotalOvertime
FROM active INNER JOIN tblShift ON active.Shift = tblShift.ID;
(Nhớ là định dạng trong Query đối với trường thời gian phải thêm vào cụm HH:MM)
Bạn có thể sử dụng tập tin kèm theo của mình nhé, mình đã bổ sung thêm bảng quản lý ca kíp và sửa bảng active của bạn.
Đại loại cách làm là thế!
2. Về mặt phân tích dữ liệu:
Nếu bạn cần quản lý ca kíp thì bảng Active còn thiếu dữ liệu ca kíp nhé - nếu có dữ liệu này thì bạn có thể quản lý được ai làm thêm giờ bao lâu và từ lúc nào.