每周平均报告:Redshift

问题描述 投票:1回答:1

6月8日星期一6月1日的前两周我的销售数据低于

日期|计数

2015-06-01 03:25:53 | 1

2015-06-01 03:28:51 | 1

2015-06-01 03:49:16 | 1

2015-06-01 04:54:14 | 1

2015-06-01 08:46:15 | 1

2015-06-01 13:14:09 | 1

2015-06-01 16:20:13 | 5

2015-06-01 16:22:13 | 1

2015-06-01 16:27:07 | 1

2015-06-01 16:29:57 | 1

2015-06-01 19:16:45 | 1

2015-06-08 10:54:46 | 1

2015-06-08 15:12:10 | 1

2015-06-08 20:35:40 | 1

我需要在给定范围内找到每周平均销售额。

复杂查询:

  (some_manipulation_part), ifact as 
   (  select date, sales_count from final_result_set
) select date_part('h',date )) as h  ,  
         date_part('dow',date )) as day_of_week  , 
         count(sales_count) 
  from final_result_set
  group by h, dow.

输出:

h | day_of_week |计数

3 | 1 | 3 4 | 1 | 1 8 | 1 | 1 10 | 1 | 1 13 | 1 | 1 15 | 1 | 1 16 | 1 | 8 19 | 1 | 1 20 | 1 | 1

如果我尝试对上述最终结果应用平均值,那么它实际上并没有得到正确的答案!

(some_manipulation_part), ifact as 
(  select date, sales_count from final_result_set
) select date_part('h',date )) as h  ,  
         date_part('dow',date )) as day_of_week  , 
         avg(sales_count) 
  from final_result_set
  group by h, dow.

h | day_of_week |计数

3 | 1 | 1

4 | 1 | 1 8 | 1 | 1 10 | 1 | 1 13 | 1 | 1 15 | 1 | 1 16 | 1 | 1 19 | 1 | 1 20 | 1 | 1

所以我在给定范围内有两个星期一,它实际上并没有除以它。我甚至不确定redshift里面发生了什么。

sql postgresql report amazon-redshift
1个回答
1
投票

要获得“每周平均值”,请使用date_trunc()

SELECT date_trunc('week', my_date_column) as week
     , avg(sales_count) AS avg_sales
FROM   final_result_set
GROUP  BY 1;

我希望你实际上并没有使用date作为日期列的名称。它是SQL中的保留字和基本类型名称,不要将其用作标识符。

如果按星期几(DOW)分组,则每个工作日获得平均值。星期日是0.(周日使用ISODOW获得7分。)

© www.soinside.com 2019 - 2024. All rights reserved.