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

日付と時刻のシーケンスを生成する

    ラグ関数を使用して、dtでパーティション分割することをお勧めします...これがお役に立てば幸いです。

    with par as (
      select date '2015-08-07' enddate, 4 LookBackDays, 3600 inteval, 'Bob' Name, 
             '09:00' open, '14:00' close from dual),
    t1 as (
      select to_char(enddate-level+1, 'yyyy-mm-dd') dt, name, open, close from par
        connect by level <= LookBackDays + 1 ),
    t2 as (
      select to_char(to_date(open, 'hh24:mi') + (level) * inteval / (24*60*60), 'hh24:mi') tm
        from par
        connect by to_date(open, 'hh24:mi') + level * inteval / (24*60*60) 
                   <= to_date(close, 'hh24:mi') )
    select to_date(dt, 'yyyy-mm-dd') dt, 
           lag(to_date(dt||' '||tm, 'yyyy-mm-dd hh24:mi'), 1,to_date(dt||' '||open, 'yyyy-mm-dd hh24:mi'))over(partition by to_date(dt||' '||open, 'yyyy-mm-dd hh24:mi') order by tm) open,  
           to_date(dt||' '||close, 'yyyy-mm-dd hh24:mi') close, name, 
           to_date(dt||' '||tm, 'yyyy-mm-dd hh24:mi') IntervalEnd
    from t1 cross join t2 order by dt, tm
    



    1. mySQL各カテゴリの上位5つを返す

    2. 初めてユーザー権限を付与したときにGRANTUSAGEが作成されるのはなぜですか?

    3. オペランドタイプの衝突:varcharは、暗号化されたデータベースに挿入しようとしているvarchar(50)と互換性がありません

    4. ドロップダウンを使用した場合、SQLインジェクションを防ぐ必要がありますか?