Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thiết kế để đại diện cho việc nhận và trả phòng của nhân viên

Tôi biết bài đăng này đã lỗi thời nhưng đây là bài viết dành cho người vẫn đang tìm kiếm giải pháp:

Cấu trúc bảng điểm danh

id              | int
employee_code   | varchar
status          | enum('check_in','check_out')
created         | datetime

Dữ liệu

id  employee_code   status          created

1   EMP0001         check_in        2016-08-20 09:30:30
2   EMP0001         check_out       2016-08-20 18:15:00
3   EMP0002         check_in        2016-08-21 14:52:48
4   EMP0002         check_out       2016-08-21 21:09:18

Truy vấn

SELECT 
  A1.employee_code,
  A1.created AS check_in_at,
  A2.created AS check_out_at,
  TIMEDIFF(A2.created, A1.created) AS total_time 
FROM
  tbl_attendances AS A1 
  INNER JOIN tbl_attendances AS A2 
    ON A1.employee_code = A2.employee_code 
    AND DATE(A1.created) = DATE(A2.created) 
WHERE 1 = 1 
  AND A1.status = 'check_in' 
  AND A2.status = 'check_out' 
  AND DATE(A1.created) BETWEEN '2016-08-20' 
  AND '2016-08-21' 
  AND DATE(A2.created) BETWEEN '2016-08-20' 
  AND '2016-08-21' 
ORDER BY A1.created DESC

Kết quả

employee_code   check_in_at            check_out_at           total_time

EMP0002         2016-08-21 14:52:48    2016-08-21 21:09:18    06:16:30
EMP0001         2016-08-20 09:30:30    2016-08-20 18:15:00    08:44:30

Đối với nhân viên cụ thể, hãy thêm AND A1.employee_code = 'EMP0001' trong WHERE mệnh đề



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các cột bit MySql trả về một số lớn kỳ lạ trong PHP 7.1 (không phải trong các phiên bản trước)

  2. Đạt được thứ bậc, Mối quan hệ cha mẹ / con cái một cách hiệu quả và dễ dàng

  3. JDBC, MySQL:nhận các bit vào cột BIT (M! =1)

  4. Đặt múi giờ mặc định trên Máy chủ MySql qua PhPMyAdmin

  5. CHỌN tất cả các bản ghi 30 ngày tuổi