Sql 如何在红移中优化此方法?
我试图将每日谷物的数据按每月和每周进行分组。然后,我尝试找出每个星期的最后6周和6个月的合计值 注意:就我而言,数据非常庞大,大约有3000万。 因此,我现在采用的方法是创建多个临时表,例如一个用于每周级别的聚合数据,另一个用于每月聚合数据,等等。这是我的完整方法。有人能提出一种方法来优化它吗 更新:添加了输入和预期输出 输入: 预期输出:Sql 如何在红移中优化此方法?,sql,amazon-redshift,Sql,Amazon Redshift,我试图将每日谷物的数据按每月和每周进行分组。然后,我尝试找出每个星期的最后6周和6个月的合计值 注意:就我而言,数据非常庞大,大约有3000万。 因此,我现在采用的方法是创建多个临时表,例如一个用于每周级别的聚合数据,另一个用于每月聚合数据,等等。这是我的完整方法。有人能提出一种方法来优化它吗 更新:添加了输入和预期输出 输入: 预期输出: 我看到了许多我可以给你的小优化技巧。我不确定我是否有时间将它们全部组合到一个示例中 与语句一起使用-所谓的,而不是临时表。临时表的速度可能会更快,但红移
我看到了许多我可以给你的小优化技巧。我不确定我是否有时间将它们全部组合到一个示例中
,而不是临时表。临时表的速度可能会更快,但红移应该足够快,可以处理聚合(在10或100百万行的情况下)
您将有一个查询,并将每个临时表步骤声明为一个表变量:
SELECT DATE_TRUNC('month', '2019-08-14'::DATE); -- will return 2019-08-01
SELECT DATE_TRUNC('week', '2019-08-14'::DATE); -- will return 2019-08-12
select to_char('2019-08-14'::DATE, 'WW'); -- returns 33
SUM(日期条件为value END时为CASE)
可能更容易获得一段时间的总和,但这取决于您如何构造转换样本数据和预期结果将有所帮助。我不知道你想实现什么。只是一个提示-在红移中你可以使用
'2019-08-14'
作为日期
-它将被隐式铸造。或者直接转换为'2019-08-14'::DATE
@gordon我会用输入和输出细节更新问题,您可以建议其他方式,而不是编写这么多代码
SELECT DATE_TRUNC('month', '2019-08-14'::DATE); -- will return 2019-08-01
SELECT DATE_TRUNC('week', '2019-08-14'::DATE); -- will return 2019-08-12
select to_char('2019-08-14'::DATE, 'WW'); -- returns 33