Sql Netezza不支持子查询和类似。。。有解决办法吗?

Sql Netezza不支持子查询和类似。。。有解决办法吗?,sql,subquery,netezza,Sql,Subquery,Netezza,我相信这对你们大多数人来说都是一个非常简单的问题,但它让我发疯。。。 我有一张这样的桌子: | customer_id | date | purchase amount | 我需要每天提取当天购买的客户数量,以及在当前购买之前的30天内至少购买的客户数量 我尝试使用如下子查询: select purch_date as date, count (distinct customer_id) as DAU, count(distinct (select customer_id from t

我相信这对你们大多数人来说都是一个非常简单的问题,但它让我发疯。。。 我有一张这样的桌子:

| 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
未返回任何错误,但MAU和DAU列相同,这是错误的。
有人能帮我吗?非常感谢

我不相信netezza支持select行中的子查询…移动到from语句

 select pur_date as date, count(distinct customer_id) as DAU
 from table
 group by purch_date

 select pur_date as date, count (distinct customer_ID) as MAU
 from table
 where purch_date<= date and purch_date>date-30
 group by purch_date
我希望这对毛和道来说是正确的。加入他们以获得组合结果:

 select a.date, a.dau, b.mau
 from
 (select pur_date as date, count(distinct customer_id) as DAU
 from table
 group by purch_date) a

 left join 
 (select pur_date as date, count (distinct customer_ID) as MAU
 from table
 where purch_date<= date and purch_date>date-30
 group by purch_date) b

 on b.date = a.date

我终于明白了:对于所有感兴趣的人,以下是我解决问题的方法:

select a.date_dt, max(a.dau), count(distinct b.player_id)
from (select dt.cal_day_dt as date_dt, 
        count(distinct s.player_id) as dau
        FROM IA_PLAYER_SALES_HOURLY s
        join IA_DATES dt on dt.date_key = s.date_key
        group by dt.cal_day_dt
        order by dt.cal_day_dt
) a
join (
        select dt.cal_day_dt as date_dt, 
        s.player_id as player_id
        FROM IA_PLAYER_SALES_HOURLY s
        join IA_DATES dt on dt.date_key = s.date_key
        order by dt.cal_day_dt
) b on b.date_dt <= a.date_dt and b.date_dt > a.date_dt - 30
group by a.date_dt
order by a.date_dt;

希望这有帮助。

Netezza不喜欢选择行中的Subselect…最好编写两个查询,一个计算并返回mau,另一个按日期进行dau。将这两个查询转换为子查询,并在日期将它们连接在一起,然后从中选择。谢谢。但是如果我想基于日期加入它们,我需要MAU表按日期分组,对吗?如果是这样的话,那么我的问题和以前一样。。。你介意写下你所指的代码吗?感谢lotI,我认为无法支持select行中的子问题来自于用于分配查询处理器负载的神秘的netezza FPGA逻辑。我贴了一个答案…有点猜测。您需要的是两个工作查询…一个用于计算给定日期的DAU,另一个用于计算同一日期的MAU。按日期对它们进行分组,在from子句中调用它们的子查询,并在date上加入它们,但在这种情况下,您将不会计算MAU,因为第二个查询的countdistinct customer\u ID仍将每天拆分计数,因为您是按purch\u日期进行分组的。我错了吗?感谢您的回复您是对的…我们希望在30天时间范围内的第一天返回,而不是pur_日期。那会有点诡计…给我一点
select a.date_dt, max(a.dau), count(distinct b.player_id)
from (select dt.cal_day_dt as date_dt, 
        count(distinct s.player_id) as dau
        FROM IA_PLAYER_SALES_HOURLY s
        join IA_DATES dt on dt.date_key = s.date_key
        group by dt.cal_day_dt
        order by dt.cal_day_dt
) a
join (
        select dt.cal_day_dt as date_dt, 
        s.player_id as player_id
        FROM IA_PLAYER_SALES_HOURLY s
        join IA_DATES dt on dt.date_key = s.date_key
        order by dt.cal_day_dt
) b on b.date_dt <= a.date_dt and b.date_dt > a.date_dt - 30
group by a.date_dt
order by a.date_dt;