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}
    

    SQLFIDDLEHERE。

    編集済み: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フィドルはこちら



    1. PHPでMysql行を反復処理します

    2. 大きなテキスト/CSVファイルをPLSQLで複数のファイルに分割

    3. Django + Python 3+PostgreSQLをAWSElasticBeanstalkにデプロイする

    4. SQLServer2005/2008で曜日を取得する