2017-07-17 5 views
0

Ich muss die letzten 5 Werktage mit Oracle Zeitplan finden.Die letzten 5 Geschäftstage (ausgenommen Sa & So) auf Oracle Schule

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 

Bitte helfen Sie mir ist dieser Weg ist richtig oder jeder andere optimierte Weg ist da.

+0

Ein Scheduler kann nicht auf der Flucht die letzten paar Werktage, wie sie schon passiert sind. Wie passt der Scheduler zu Ihrer Frage? – Ben

Antwort

1

select level from dual connect by level <=7 liefert Ergebnisse 1..7 für Ebene.

diese verwenden, wählen Sie die letzten sieben Tage und entfernen Samstag und Sonntag:

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 
*/ 

Wenn Sie die Ergebnisse in den Spalten schwenken dann müssen:

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 
*/ 
Verwandte Themen