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

日付範囲で最も重複する期間を見つける方法

    これにはいくつかのアプローチがあります。 1つは相関サブクエリを使用します。それはあまり楽しいことではありません。代わりに、Oracleを使用しているため、累積合計法を使用しましょう。

    重要なのは、開始の値が+1、終了の値が-1のタイムスタンプのリストから開始することです。これは簡単です:

    select t.*
    from ((select starttime as thetime, 1 as value from table t) union all
          (select endtime, -1 as value from table t)
         ) t
    

    ここで、valueの累積合計 任意の時点でのアクティブなオーバーラップの数を示します:

    select t.*, sum(value) over (order by thetime) as numactives
    from ((select starttime as thetime, 1 as value from table t) union all
          (select endtime, -1 as value from table t)
         ) t
    

    これはあなたの問題を解決します。 order by numactives descを追加することをお勧めします 特定の時間に。



    1. mysqlのトリガーまたはストアドプロシージャからRESTAPIを呼び出しますか?

    2. VBAの既存のオブジェクトですでに使用されている名前

    3. phpとmysqlで残り時間を計算する方法は?

    4. 便利なPHPデータベースクラス