【问题标题】:Limiting a Grouping in SQL限制 SQL 中的分组
【发布时间】:2015-09-21 17:53:29
【问题描述】:

我有一些代码可以计算一段时间内的平均销售额,然后测量最后 4 次销售额,看看它们是否低于该基线的 20%。我让它一次为一个客户工作,但我需要它为所有客户工作。

select cust_nbr, avg(b) avg_baseline, sales from (
  select cust_nbr, baseline as b, sales from (
    select tbl.*,
       avg(sales) over(partition by cust_nbr order by cust_nbr, weekly rows between 12 preceding and current row) as rolling_avg, (rolling_avg*0.2) as baseline
     from (
       select cust_nbr, sum(sales) as sales, next_day(prcs_dt,'Sunday') - 1 as weekly from table
       where cust_nbr in ('1234')--, '2345', '3456')
       group by cust_nbr, weekly
     ) tbl
   ) tbl2
  order by weekly desc limit 4  --Limiting to 4 rows, need it to be 4 per group
) tbl3 group by cust_nbr, sales

当前输出:

cust_nbr, avg_baseline, sales
1234, 20, 150
1234, 21, 160
1234, 23, 180
1234, 25, 140

理想输出:

cust_nbr, flag
1234, 0

其中 flag 是客户的销售额是否低于最近 4 次销售的滚动平均值的 20%

【问题讨论】:

    标签: sql netezza


    【解决方案1】:

    您使用having 子句限制group by。它类似于where 子句,但它与group by 结合使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多