【发布时间】:2014-07-24 20:43:27
【问题描述】:
我相信这对你们大多数人来说是一个非常简单的问题,但它让我发疯了...... 我有一张这样的表(简化):
| customer_id | date | purchase amount |
我需要为每一天提取当天购买的客户数量,以及在当前交易之前的 30 天内至少进行购买的客户数量。
我尝试使用这样的子查询:
select purch_date as date, count (distinct customer_id) as DAU,
count(distinct (select customer_id from table where purch_date<= date and purch_date>date-30)) as MAU
from table
group by purch_date
Netezza 返回一个错误,指出不支持子查询,我应该考虑重写查询。但是怎么办?!?!?
我尝试使用case when 语句,但没有奏效。其实如下:
select purch_date as date, count (distinct customer_id) as DAU,
count(distinct case when (purch_date<= date and purch_date>date-30) then player_id else null end) as MAU
from table
group by purch_date
没有返回错误,但是 MAU 和 DAU 列是相同的(这是错误的)。 有人可以帮我吗?非常感谢
【问题讨论】:
-
Netezza 不喜欢选择行中的子选择...您最好编写两个查询,一个计算并返回 mau,另一个执行 dau(按日期)。将这两个查询转换为子查询,并在日期将它们连接在一起并从中进行选择。
-
谢谢。但是如果我想根据日期加入他们,我需要按日期对 MAU 表进行分组,对吗?如果是这样,那么我有和以前一样的问题......你介意编写你所指的代码吗?非常感谢
-
我认为无法在选择行中支持子查询来自用于分配查询处理器负载的神秘 netezza FPGA 逻辑。我发布了一个答案......有点猜测。您想要的是两个工作查询...一个用于计算给定日期的 DAU,另一个用于计算同一日期的 MAU。按日期对它们进行分组,在 from 子句中将它们称为子查询并在日期加入它们