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

Cách tìm khoảng thời gian phù hợp cho nhiều hơn 2 người dùng

Để biết khi nào cả user1 và user2 đều rảnh, vui lòng thử bên dưới:

select 
a.datetime_start as user1start,a.datetime_end as user1end,
b.datetime_start as user2start,b.datetime_end as user2end ,
case when a.datetime_start > b.datetime_start then a.datetime_start 
   else b.datetime_start end as avail_start,
case when a.datetime_end>b.datetime_end then b.datetime_end 
   else a.datetime_end end as avail_end
from users a inner join users b on
a.datetime_start<=b.datetime_end and a.datetime_end>=b.datetime_start     
and  a.userid={user1} and b.userid={user2}

SQL FIDDLE TẠI ĐÂY.

ĐÃ CHỈNH SỬA:Để so sánh nhiều hơn 2 người dùng, vui lòng thử bên dưới:

select max(datetime_start) as avail_start,min(datetime_end) as avail_end
from(
        select *,
        @rn := CASE WHEN @prev_start <=datetime_end and @prev_end >=datetime_start THEN @rn ELSE @rn+1 END AS rn,
        @prev_start := datetime_start,
        @prev_end := datetime_end 
        from(
          select * from users2 m
          where exists ( select null 
                          from users2 o 
                           where o.datetime_start <= m.datetime_end and o.datetime_end >= m.datetime_start
                           and o.id <> m.id 
                        ) 
             and m.userid in (2,4,3,5)
           order by m.datetime_start) t,
           (SELECT @prev_start := -1, @rn := 1, @prev_end=-1) AS vars 
) c 
group by rn 
having count(rn)=4 ;

Cần thay đổi m.userid in (2,4,3,5)having count(rn)=4 theo số lượng người dùng.

SQL FIDDLE TẠI ĐÂY



  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ập nhật bảng từ một bảng khác và cơ sở dữ liệu khác

  2. Lỗi SQL # 1071 - Khóa được chỉ định quá dài; độ dài khóa tối đa là 767 byte

  3. Sắp xếp thứ tự các cột của bảng MySql bằng Python

  4. Chèn biểu mẫu HTML không hoạt động trong PHP và MySQL

  5. Thay đổi thủ tục lưu trữ MySQL tên 'Đối chiếu cơ sở dữ liệu'