Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak znaleźć pasujące przedziały czasowe dla więcej niż 2 użytkowników

Aby dowiedzieć się, kiedy zarówno użytkownik 1, jak i użytkownik 2 są wolni, spróbuj poniżej:

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 TUTAJ.

EDYTOWANO:Aby porównać więcej niż 2 użytkowników, spróbuj poniżej:

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 ;

Musisz zmienić m.userid in (2,4,3,5) i having count(rn)=4 według liczby użytkowników.

SQL FIDDLE TUTAJ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz i wyślij pocztę z mojej bazy danych

  2. Łączenie Androida z MS SQL SERVER 2008

  3. jak zbudować aplikację php mysql działającą offline

  4. jak mogę uzyskać tablicę ostatnio wstawionych identyfikatorów rekordów?

  5. Adnotacja formuły hibernacji - funkcje MySql:INTERWAŁ, DZIEŃ