Tôi có một employee_attendance bảng (SQL Server 2012
) với các cột sau:Làm thế nào để có được lối vào đầu tiên nhân viên trong một ngày gần shift mình
- AttendanceId (Identity)
- EmployeeID
- Timestamp (đục lỗ trong hoặc ngoài)
- Mã truy cập (I = IN, O = OUT)
Đây là SQL Fiddle với một số dữ liệu mẫu: http://sqlfiddle.com/#!3/ba8a1/1
Tôi biết rằng những nhân viên có thể làm việc trên bất kỳ ngày nào trên bất kỳ của 3 ca chúng ta có:
- phím Shift A (Từ 07:00 đến 15:00)
- phím Shift B (Từ 15:00 đến 23:00)
- phím Shift C (Từ 23:00-07:00 ngày hôm sau)
Vì vậy, những gì tôi cần biết cho mỗi nhân viên trong một ngày đã chọn (dữ liệu mẫu chỉ có một ngày và đã được lọc để chỉ hiển thị IN hồ sơ, do đó chỉ IN truy cập vào công ty) là
Timestamp
đầu tiên đó là gần (dưới hoặc trên) lối vào Shift.
Dưới đây là hình ảnh của những gì dữ liệu SQL Fiddle nên trông giống như sau khi áp dụng kịch bản phải:
yay cho câu đố sql với dữ liệu mẫu! <3 – Kritner
Đối với nhân viên 116, dấu thời gian mà bạn chỉ định là đúng 45 phút trước khi bắt đầu ca làm việc trong khi dấu thời gian khác (15:25:43) chỉ cách 25 phút. Vì vậy, bạn không tìm kiếm gần nhất, chính xác? Điều gì sẽ xảy ra nếu 14:15:35 thực sự là 12:15:35? Nhân viên có thực sự sớm hoặc trễ 25 phút không? Dữ liệu có đủ sạch sẽ để nói sẽ luôn chỉ có một thay đổi cho mỗi nhân viên trong một ngày nhất định và chúng tôi luôn có thể sử dụng dấu thời gian sớm nếu nó tồn tại và nếu không sử dụng dấu thời gian trễ? –
Làm cách nào để biết ai đó đang thay đổi ai? –