每周平均报告:Redshift

时间:2015-07-02 12:38:33

标签: sql postgresql report amazon-redshift

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

日期|计数

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里面发生了什么。

1 个答案:

答案 0 :(得分: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。)