Mysql
 sql >> база данни >  >> RDS >> Mysql

Намиране на безплатни блокове време в mysql и php?

Опитайте тази заявка

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

Това ще покаже тези резултати

+---------------------------------------------+
¦ 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)    |
+--------------------+------------------------+ 

Също така трябва да имате 21:00:00 в таблицата или няма да можете да получите последната времева разлика. въведох 21:00:00 като начална и крайна дата в таблицата.

РЕДАКТИРАНО

Това е модифицирана заявка

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)      

И резултатът е

+--------------------------------------------------------+
¦ 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     |
+----------------------+---------------------------------+  

Моментите, които можете да научите от тази заявка, са

  1. Използване на функцията Timediff. timediff('краен час','начален час')
  2. Съединяване с горен номер
  3. Избягвайте първия запис в присъединяване с дълго изместване и ограничение, започващо от 1 вместо нула
  4. Използване на IFNULL ifnull('ако тук идва null','изберете това тогава')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличане на редове, групирани по час с MySQL

  2. Как мога да филтрирам символите на емоджи от моя вход, за да мога да запиша в MySQL <5.5?

  3. Mysql присъединяване и сумата е удвояване резултат

  4. Как да получите стойността от Javascript Prompt Box и да я предадете в PHP променлива, за да можете да запишете в SQL?

  5. MySQL:Как да търсите в множество таблици низ, съществуващ във всяка колона