2017-05-11 11 views
0

以下のコードで、今月と過去6ヶ月間に返すことができます。 私のコード:私はこの日、過去9つの日付を返す必要が同じようにsysdateと過去9日を返す必要があります

SELECT TO_CHAR(add_months(TRUNC(to_date(sysdate),'Month'), -rownum+1), 'Month') mon, 
     rownum month_order 
FROM dual 
CONNECT BY rownum <= 
    (SELECT COUNT(mon) 
    FROM 
     (SELECT TO_CHAR(add_months(start_date, level-1), 'fmMonth') AS mon 
     FROM 
      (SELECT to_date(add_months(TRUNC(sysdate),-6)) start_date, 
      to_date(sysdate) end_date 
      FROM dual) 
      CONNECT BY level <= months_between(TRUNC(end_date,'MM'), TRUNC(start_date,'MM')) + 1) dual); 

connect byを使用して10日を戻すには、この上で私を助けてください。 ありがとうございます。

答えて

0

はここで最後の10日間のクエリです。

select sysdate - (level-1) 
     , level as day_order 
from dual 
connect by level <= 10; 

あなたの月のクエリは非常に工学的すぎるようです。

select to_char(add_months(trunc(sysdate, 'MM'), 1 - level), 'Month') 
     , level as month_order 
from dual 
connect by level <= 7; 

「データが今日の日付に利用可能な場合としましょう、残りの9日のいずれかのデータを持っていますが、それはゼロとしてカウント数を表示するために持っていません」:これは、同じことをするだろう

外側に設定され生成された結果を使用して参加:

with q as (
select sysdate - (level-1) as dt 
     , level as day_order 
from dual 
connect by level <= 10 
) 
select q.dt as txn_date 
     , sum(t42.col1) 
from q 
    left outer join t42 
     on t42.transaction_date = q.dt 
group by q.dt; 
+0

データが今日の日付に利用可能な場合としましょうと残りの9つの日付にはデータはありませんが、カウントはゼロで表示する必要があります –

+0

どうしてですか?ヒント 'trunc(remedy_created_on)= q.dt' – APC

+0

ありがとうございました。私はそれを試しました...今働いています。 –

0

これを試してみてください -

SELECT (TRUNC(SYSDATE) + 1) - ROWNUM 
FROM DUAL 
CONNECT BY ROWNUM <= 10 
0
私はこの日、過去9つの日付を返す必要が同様に

これは、今日、過去9日間を取得します:

SELECT TRUNC(SYSDATE) - LEVEL + 1 AS day 
FROM DUAL 
CONNECT BY LEVEL <= 10 

今月と過去6ヶ月

SELECT TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1 - LEVEL), 'Month') AS month 
FROM DUAL 
CONNECT BY LEVEL <= 7 
関連する問題