2017-07-17 9 views
0

oracle scheduleを使用して過去5営業日を検索しなければなりません。Oracle Schduleの最後の5営業日(土&日除く)

select sysdate as current_date, 
     case when to_char(sysdate,'D') in (1,2,7) 
      then next_day(sysdate-7,'Friday') 
      else sysdate-1 end as prev_weekday1, 
     case when to_char(sysdate,'D') in (1,2,7) 
      then next_day(sysdate-7,'Friday') 
      else sysdate-2 end as prev_weekday2, 
     case when to_char(sysdate,'D') in (1,2,7) 
      then next_day(sysdate-7,'Friday') 
      else sysdate-3 end as prev_weekday3, 
     case when to_char(sysdate,'D') in (1,2,7) 
      then next_day(sysdate-7,'Friday') 
      else sysdate-4 end as prev_weekday4, 
     case when to_char(sysdate,'D') in (1,2,7) 
      then next_day(sysdate-7,'Friday') 
      else sysdate-5 end as prev_weekday5 
from dual 

この方法は正しいですか、他の最適化された方法がありますように助けてください。

+0

スケジューラが上で実行することはできませんが彼らがすでに起きているように最後の数営業日です。スケジューラはあなたの質問にどのように適合しますか? – Ben

答えて

1

select level from dual connect by level <=7レベル1の結果を返します。

、土曜日と日曜日の最後の7日間を選択して削除するには、これを使用する:あなたは列の結果が必要な場合は、ピボット

select 'prev_weekday_' || rownum as prev_weekday, d.dt 
    from (select trunc(sysdate) - level dt, 
       to_char(sysdate - level, 'D') w_day 
      from dual 
     connect by level <= 7) d 
where d.w_day <= 5 
order by d.dt desc; 

/* 
prev_weekday_1 14.07.2017 
prev_weekday_2 13.07.2017 
prev_weekday_3 12.07.2017 
prev_weekday_4 11.07.2017 
prev_weekday_5 10.07.2017 
*/ 

select * 
    from (select 'prev_weekday_' || rownum as prev_weekday, d.dt 
      from (select trunc(sysdate) - level dt, 
         to_char(sysdate - level, 'D') w_day 
        from dual 
       connect by level <= 7) d 
     where d.w_day <= 5 
     order by d.dt desc) 
pivot(max(dt) 
    for prev_weekday in('prev_weekday_1' as prev_weekday_1, 
         'prev_weekday_2' as prev_weekday_2, 
         'prev_weekday_3' as prev_weekday_3, 
         'prev_weekday_4' as prev_weekday_4, 
         'prev_weekday_5' as prev_weekday_5)); 
/* 
prev_weekday_1 prev_weekday_2 prev_weekday_3 prev_weekday_4 prev_weekday_5 
    14.07.2017  13.07.2017  12.07.2017  11.07.2017  10.07.2017 
*/ 
関連する問題