这是一个非常典型的要求,我试图对该群体进行编码但不起作用
RegDate signupdate channel ID product
09/05/2016 23:52:34 09/05/2016 23:55:06 Mobile 1 apple
09/05/2016 23:52:32 09/05/2016 23:52:45 Mobile 2 mango
09/05/2016 23:52:16 Mobile 3 mango
09/05/2016 23:52:49 Mobile 4 banana
09/05/2016 23:52:50 Mobile 5 banana
09/05/2016 23:52:50 09/05/2016 15:52:45 Mobile 5 Kiwi
输出
Regdate min No.of Regs No.of Signups channel Product
09/05/2016 23:52 1 1 mobile apple
09/05/2016 23:52 2 1 mobile mango
09/05/2016 23:52 2 mobile banana
09/05/2016 23:52 1 mobile Kiwi
我当前的查询:
select SUBSTR(TO_CHAR(regdate, 'HH24:MI:SS'),1,5),count(distinct ID),
channel, product
from glance_REG_act_Prod_samp
group by SUBSTR(TO_CHAR(regdate, 'HH24:MI:SS'),1,5), source, reg_product
答案 0 :(得分:0)
我认为您需要group by
中的日期,而不是秒。这样做你想要的吗?
select TO_CHAR(regdate, 'YYYY-MM-DD HH24:MI'), source, reg_product,
count(distinct ID)
from glance_REG_act_Prod_samp
group by TO_CHAR(regdate, 'YYYY-MM-DD HH24:MI'), source, reg_product;
注意:除非COUNT(*)
的副本确实存在,否则您应该使用ID
。
答案 1 :(得分:0)
我认为这就是你所追求的:
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
请注意,我假设id
列是唯一的,而且您的最后一行id = 5的事实是错字。
我还假设猕猴桃产品的输出没有可用的注册计数的原因是因为注册日期在注册日期之前。你没有解释背后的逻辑,所以我不知道这是否是你预期输出的错字。您应该能够修改我的查询以输出您需要的任何结果(例如,case when signupdate is not null then 1 end
?)。
此外,如果要显示空白而不是0,那么将输出更改为null而不是0,这是一个简单的CASE
/ DECODE
;你的选择。
完全不谈,你正在做:SUBSTR(TO_CHAR(regdate, 'HH24:MI:SS'),1,5)
...为什么?你是从日期创建一个字符串,然后缩短它。为什么不按照您想要的格式从日期创建字符串?例如。 to_char(regdate, 'hh24:mi')