sql >> データベース >  >> RDS >> Oracle

エンベロープを取得します。つまり、重複する期間

    これも試してみてください。私はそれを可能な限りテストしました。隣接する間隔の合体(10:15から10:30と10:30から10:40が1つの間隔、10:15から10:40に結合される)を含むすべての可能性をカバーしていると思います。 )。また、かなり高速である必要があり、あまり使用しません。

    with m as
            (
             select ip_address, start_time,
                       max(stop_time) over (partition by ip_address order by start_time 
                                 rows between unbounded preceding and 1 preceding) as m_time
             from ip_sessions
             union all
             select ip_address, NULL, max(stop_time) from ip_sessions group by ip_address
            ),
         n as
            (
             select ip_address, start_time, m_time 
             from m 
             where start_time > m_time or start_time is null or m_time is null
            ),
         f as
            (
             select ip_address, start_time,
                lead(m_time) over (partition by ip_address order by start_time) as stop_time
             from n
            )
    select * from f where start_time is not null
    /
    


    1. 実用的な例を使用したSQLiteCROSSJOIN

    2. CMONHAを使用したClusterControlノードの高可用性構成

    3. MySQLユーザーDBにパスワード列がありません-OSXへのMySQLのインストール

    4. MySQLレプリケーションを使用したMoodleの高可用性データベースの構築