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

Как да намерите съвпадащи интервали от време за повече от 2 потребители

За да разберете кога и user1, и user2 са безплатни, моля, опитайте по-долу:

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 ТУК.

РЕДАКТИРАНО:За да сравните повече от 2 потребители, моля, опитайте по-долу:

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 ;

Трябва да промените m.userid in (2,4,3,5) и having count(rn)=4 според броя на потребителите.

SQL FIDDLE ТУК



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JOINS срещу while изявления

  2. Визуален конструктор на заявки

  3. Условия за състезание с mysql_last_id()

  4. SQL Server еквивалент на функцията substring_index в MySQL

  5. Проблеми с базата данни при разрешаване на постоянни влизания в няколко браузъра