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

Tìm khối thời gian rảnh trong mysql và php?

Hãy thử truy vấn này

SELECT
  a.id,
  a.start_hour,
  a.end_hour,
  TIMEDIFF(la.start_hour, a.end_hour) as `Free Time`
FROM appointment as a
  LEFT JOIN(SELECT * FROM appointment LIMIT 1,18446744073709551615) AS la
    ON la.id = a.id + 1
  LEFT JOIN (SELECT * FROM appointment) AS ra ON a.id = ra.id

Điều này sẽ hiển thị các kết quả này

+---------------------------------------------+
¦ id ¦ start_hour BY ¦ end_hour   | Free Time |
¦----+---------------¦------------------------|
¦  1 ¦   08:00:00    ¦  08:15:00  | 05:45:00  |
¦  2 ¦   14:00:00    ¦  14:30:00  | 02:30:00  |
¦  3 ¦   17:00:00    ¦  17:45:00  | 03:15:00  |
¦  4 ¦   21:00:00    ¦  21:00:00  | (NULL)    |
+--------------------+------------------------+ 

Ngoài ra, bạn phải có 21:00:00 trong bảng nếu không bạn sẽ không thể nhận được sự khác biệt về thời gian cuối cùng. tôi đã nhập 21:00:00 làm ngày bắt đầu và ngày kết thúc trong bảng.

ĐÃ CHỈNH SỬA

Đây là truy vấn đã sửa đổi

SELECT
  a.id,
  a.end_hour AS `Free time Start`,
  IFNULL(la.start_hour,a.end_hour) AS `Free Time End`,
  IFNULL(TIMEDIFF(la.start_hour, a.end_hour),'00:00:00') AS `Total Free Time`
FROM appointment AS a
  LEFT JOIN (SELECT * FROM appointment LIMIT 1,18446744073709551615) AS la
    ON la.id = (SELECT MIN(id) FROM appointment where id > a.id LIMIT 1)      

Và kết quả là

+--------------------------------------------------------+
¦ id ¦ Free time Start ¦ Free Time End | Total Free Time |
¦----+-----------------¦---------------------------------|
¦  1 ¦   08:15:00      ¦ 14:00:00      |    05:45:00     |
¦  2 ¦   14:30:00      ¦ 17:00:00      |    02:30:00     |
¦  3 ¦   17:45:00      ¦ 21:00:00      |    03:15:00     |
¦  4 ¦   21:00:00      ¦ 21:00:00      |    00:00:00     |
+----------------------+---------------------------------+  

Các điểm cần học từ truy vấn này là

  1. Việc sử dụng hàm Timediff. timediff ('thời gian kết thúc', 'thời gian bắt đầu')
  2. Tham gia với số trên
  3. Tránh ghi đầu tiên khi kết hợp với độ lệch dài và giới hạn bắt đầu từ 1 thay vì 0
  4. Cách sử dụng IFNULL ifnull ('nếu ở đây là null', 'hãy chọn cái này sau đó')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối JDBC hết thời gian chờ không thể kết nối lại

  2. Hạn chế cổng MySQL 3306 vào máy chủ cục bộ với IPTABLES

  3. # 1115 - Bộ ký tự không xác định:'utf8mb4'

  4. Cắt ngắn tất cả các bảng trong cơ sở dữ liệu MySQL trong một lệnh?

  5. Làm cách nào để tôi có thể viết lại truy vấn này để tránh lỗi:Bạn không thể chỉ định bảng đích để cập nhật trong mệnh đề FROM