从SQL中的主查询中提取子集
在下面的查询中,我将“2017-09-01 00:00:00”和“2017-11-31 23:59:59”之间的活跃客户计数作为cust_90,并希望添加另一列以查找“2017-11-01 00:00:00”和“2017-11-31 23:59:59”(整个期间的子集)之间活跃客户的计数 样本输出:从SQL中的主查询中提取子集,sql,hive,Sql,Hive,在下面的查询中,我将“2017-09-01 00:00:00”和“2017-11-31 23:59:59”之间的活跃客户计数作为cust_90,并希望添加另一列以查找“2017-11-01 00:00:00”和“2017-11-31 23:59:59”(整个期间的子集)之间活跃客户的计数 样本输出: CustomerName cust_90 cust_30 David 38 15 不知道我是否可以在上面的查询中使用子查询来查
CustomerName cust_90 cust_30
David 38 15
不知道我是否可以在上面的查询中使用子查询来查找一个月内活跃的客户。任何建议都很好 这称为条件聚合,可以使用
case
表达式来完成
select custid,
count(distinct concat(visit1, visit2) end) as cust_90,
count(distinct case when to_date(date_time)>='2017-11-01' then concat(visit1, visit2) end) as cust_30
from test1
where date_time >= '2017-09-01' and date_time < '2017-12-01'
and custid = '234214124'
group by custid;
选择客户ID,
将(不同的concat(visit1,visit2)end)计数为cust_90,
将(截止日期(日期时间)>='2017-11-01'和concat(访问1、访问2)结束时的不同情况)计算为客户30
从测试1开始
其中日期时间>='2017-09-01'和日期时间<'2017-12-01'
而custid='23421124'
按客户分类;
这称为条件聚合,可以使用大小写
表达式来完成
select custid,
count(distinct concat(visit1, visit2) end) as cust_90,
count(distinct case when to_date(date_time)>='2017-11-01' then concat(visit1, visit2) end) as cust_30
from test1
where date_time >= '2017-09-01' and date_time < '2017-12-01'
and custid = '234214124'
group by custid;
选择客户ID,
将(不同的concat(visit1,visit2)end)计数为cust_90,
将(截止日期(日期时间)>='2017-11-01'和concat(访问1、访问2)结束时的不同情况)计算为客户30
从测试1开始
其中日期时间>='2017-09-01'和日期时间<'2017-12-01'
而custid='23421124'
按客户分类;
2017-11-31 23:59:59
是无效的日期时间值。@digital.亚伦:我们的系统就是这样记录日期时间的11月31日?您可能需要查阅日历…。@digital.亚伦:我明白了-如果该日期不存在,那么它将找不到该日期的任何数据。您使用count(distinct concat(visit1,visit2))
而不是count(distinct custid)
的原因是什么,etc?2017-11-31 23:59:59
是一个无效的日期时间值。@digital.亚伦:这就是我们的系统在11月31日记录日期时间的方式?您可能需要查阅日历…。@digital.亚伦:我明白了-如果该日期不存在,那么它将找不到该日期的任何数据。您使用count(distinct concat(visit1,visit2))
而不是count(distinct custid)
的原因是什么?您仍然不需要TODATE()
现在您使用的是独占端点;)现在使用的是独占端点;),您仍然不需要TODATE()
)