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里面发生了什么。
要获得“每周平均值”,请使用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分。)