2017-09-29 8 views
2

におけるトランザクションのSTAT日と終了日を知る方法:このクエリで私は表したOracle

Ename Deptno JoinDate 
RAKESH 10  01-OCT-90 
RAKESH 20  01-DEC-91 
RAKESH 30  01-MAR-92 

を、私は彼の終了日を知っている必要があり、組織内の別のDEPTNOに参加ジョインを有する特定の従業員そこに30までの部門に10から参加日の間で日と

O/P:あり

Ename  Deptno StartDate  Enddate  Working Days 
RAKESH 10  01-OCT-90  30-NOV-91  425 
RAKESH 20  01-DEC-91  29-Feb-92  90 
RAKESH 30  01-MAR-92  Still Working 9317 
+0

あなたは何を試みましたか? – OldProgrammer

答えて

2

はあなたが

0123を行きます
-- just sample of data from your question 
with t1(Ename, Deptno, JoinDate) as(
    select 'RAKESH', 10, to_date('01-OCT-90', 'dd-mon-rr') from dual union all 
    select 'RAKESH', 20, to_date('01-DEC-91', 'dd-mon-rr') from dual union all 
    select 'RAKESH', 30, to_date('01-MAR-92', 'dd-mon-rr') from dual 
) 
-- actual query 
select ename 
    , deptno 
    , to_char(joindate, 'dd-mon-rr') as startdate 
    , nvl(to_char(jdate - 1, 'dd-mon-rr'), 'Still Working...') as enddate 
    , (nvl(jdate - 1, sysdate) - joindate) as working_days 
    from (
     select ename 
      , deptno 
      , joindate 
      , lead(joindate, 1) over(partition by ename 
             order by joindate) as jdate 
     from t1 q) 

結果:

ENAME  DEPTNO STARTDATE   ENDDATE   WORKING_DAYS 
------ ---------- ------------------ ------------------ ------------ 
RAKESH   10 01-oct-90   30-nov-91     425 
RAKESH   20 01-dec-91   29-feb-92     90 
RAKESH   30 01-mar-92   Still Working...  9343.50605 

3 rows selected. 
0

実際にあなたがサブクエリを必要としません。 2別のLead関数はあなたに出力を与えるでしょう。そして、あなたの日付の列が実際にはdateデータ型であり、文字列ではないと仮定します。それ以外の場合は、to_datedateに変換する必要があります。

また、日付の列に「Still Working」と表示されることは示唆できません。報告目的の場合は、EndDateNULLと表示することで目的を解決できます。しかし、あなたがそれをやりたいのであれば、to_char関数を使ってEndDateをcharに変換し、次にNicholasのようにNVLを使用してください。

select ename,deptno,JoinDate, 
    lead(JoinDate,1) over(partition by ename order by joindate) - 1 
    as enddate 
    ,FLOOR(
      nvl(lead(JoinDate,1) over(partition by ename order by joindate) 
      ,sysdate 
       ) 
      - joindate 
     ) 
    as WorkingDays 
from tbl; 

Fiddle Demo

出力

ENAME DEPTNO JOINDATE ENDDATE  WORKINGDAYS 
RAKESH 10  01-OCT-90 30-NOV-91 426 
RAKESH 20  01-DEC-91 29-FEB-92 91 
RAKESH 30  01-MAR-92 null  9343 

説明:LEADはあなたに(でと順序によって、パーティションで定義された)次の行の結果が得られます。 end_dateの現在の行の次の日付を使用するために使用できます。出力を得るには、EndDateJoinDateを差し引くことができます。

関連する問題