私は、これはあなたが後にしているものだと思う:私はid
列が一意であり、実際には、あなたの最後の行にid = 5はタイプミスだったことを仮定しました
with sample_data as (select to_date('09/05/2016 23:52:34', 'dd/mm/yyyy hh24:mi:ss') regdate, to_date('09/05/2016 23:55:06', 'dd/mm/yyyy hh24:mi:ss') signupdate, 'Mobile' channel, 1 id, 'apple' product from dual union all
select to_date('09/05/2016 23:52:32', 'dd/mm/yyyy hh24:mi:ss') regdate, to_date('09/05/2016 23:52:45', 'dd/mm/yyyy hh24:mi:ss') signupdate, 'Mobile' channel, 2 id, 'mango' product from dual union all
select to_date('09/05/2016 23:52:16', 'dd/mm/yyyy hh24:mi:ss') regdate, null signupdate, 'Mobile' channel, 3 id, 'mango' product from dual union all
select to_date('09/05/2016 23:52:49', 'dd/mm/yyyy hh24:mi:ss') regdate, null signupdate, 'Mobile' channel, 4 id, 'banana' product from dual union all
select to_date('09/05/2016 23:52:50', 'dd/mm/yyyy hh24:mi:ss') regdate, null signupdate, 'Mobile' channel, 5 id, 'banana' product from dual union all
select to_date('09/05/2016 23:52:50', 'dd/mm/yyyy hh24:mi:ss') regdate, to_date('09/05/2016 15:52:45', 'dd/mm/yyyy hh24:mi:ss') signupdate, 'Mobile' channel, 6 id, 'kiwi' product from dual)
select to_char(regdate, 'dd/mm/yyyy') regdate,
to_char(regdate, 'hh24:mi') min,
count(*) num_of_regs,
count(case when signupdate >= regdate then 1 end) num_signups,
channel,
product
from sample_data
group by to_char(regdate, 'dd/mm/yyyy'),
to_char(regdate, 'hh24:mi'),
channel,
product
order by product;
REGDATE MIN NUM_OF_REGS NUM_SIGNUPS CHANNEL PRODUCT
---------- ----- ----------- ----------- ------- -------
09/05/2016 23:52 1 1 Mobile apple
09/05/2016 23:52 2 0 Mobile banana
09/05/2016 23:52 1 0 Mobile kiwi
09/05/2016 23:52 2 1 Mobile mango
注意。
キウイ製品の出力にサインアップカウントがない理由は、登録日が登録日より前だったためです。あなたはその背後にある論理を説明しなかったので、それがあなたの期待される出力のタイプミスであるかどうかわかりません。しかし、あなたが必要とする結果を出力するために私のクエリを修正できるはずです(例えば、case when signupdate is not null then 1 end
?)。
また、0の代わりに空白を表示する場合は、単純なCASE
/DECODE
を出力して0の代わりにnullに変更します。あなたの選択。
完全に脇に、あなたはしています:SUBSTR(TO_CHAR(regdate, 'HH24:MI:SS'),1,5)
...なぜですか?あなたは日付から文字列を作成してから短縮します。なぜあなたはあなたが望む形式で日付から文字列を作成しませんか?例えば。 to_char(regdate, 'hh24:mi')
どのようなrdbmsを使用していますか? –
oracleを使用していますが、ここではregdateとsignupdateの両方を含める方法がわかりません select count(別名ID)、SUBSTR(TO_CHAR(regdate、 'HH24:MI:SS')、1,5)、 ソース、reg_product from glance_REG_act_Prod_samp グループby SUBSTR(TO_CHAR(regedate、 'HH24:MI:SS')、1,5)、ソース、reg_product – nkalis
出力の最初の列はregdateですが、クエリの先頭にカウントがあります。 – jarlh