以下は私のテーブルデータです
time_stamp Name
01-Mar-14 a
02-Mar-14 b
02-Mar-14 c
01-May-14 d
02-May-14 e
01-Jun-14 f
必要な出力:
(3,0,2,1) (Month wise count with 0 if month doesn't exist)
次のクエリを作成しました:
select
listagg(count(1),',') within group (order by EXTRACT(month FROM time_stamp))
from ps_bqueues_host
where time_stamp BETWEEN TO_DATE('01-Mar-14', 'DD-Mon-YY') and
TO_DATE('01-Jun-14', 'DD-Mon-YY') GROUP BY EXTRACT(month FROM time_stamp)
これは私に出力を与えます:
(3,2,1) (Month of Apr with 0 is not there).
すべての月でグループ化する方法を提案してください。
ありがとう。
この元のテーブルを、指定された期間のすべての月のテーブルと結合する必要があります。1年以内の場合は、1,2,3、... 12シーケンスが必要です。
select
listagg(count(Name),',') within
group (order by m.rn)
from
(SELECT * FROM ps_bqueues_host
where time_stamp
BETWEEN TO_DATE('01-Mar-14', 'DD-Mon-YY')
and TO_DATE('01-Jun-14', 'DD-Mon-YY')
)
RIGHT JOIN
(SELECT LEVEL rn FROM dual CONNECT BY LEVEL <= 12) m
ON m.rn=EXTRACT(month FROM time_stamp)
WHERE m.rn BETWEEN EXTRACT(month FROM TO_DATE('01-Mar-14', 'DD-Mon-YY'))
AND EXTRACT(month FROM TO_DATE('01-Jun-14', 'DD-Mon-YY'))
GROUP BY m.rn
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加