Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana menemukan interval waktu yang cocok untuk lebih dari 2 pengguna

Untuk mengetahui kapan pengguna1 dan pengguna2 gratis, silakan coba di bawah ini:

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 DI SINI.

DIEDIT:Untuk membandingkan lebih dari 2 pengguna, silakan coba di bawah ini:

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 ;

Perlu mengubah m.userid in (2,4,3,5) dan having count(rn)=4 sesuai dengan jumlah pengguna.

SQL FIDDLE DI SINI



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah secara konseptual benar untuk melakukan SELECT MAX(id) dll. untuk menemukan baris yang dimasukkan terakhir?

  2. Mencari tutorial tentang cara membangun sistem pesan pribadi menggunakan PHP

  3. Tidak dapat memuat plugin otentikasi 'caching_sha2_password' di Netbean

  4. Ingin Nomor Baris pada Grup kolom di SQL SAYA?

  5. Bagaimana saya bisa mengubah string menjadi float di mysql?