微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将前 7 天的数据显示为今天行中的一列?

如何解决如何将前 7 天的数据显示为今天行中的一列?

我有这样的数据:

日期 错误 销售
7/1 1 10
7/2 2 12
7/3 3 15
7/4 4 20
7/5 5 21
7/6 6 24
7/7 7 27
7/8 8 30

我想展示前 7 个日期的错误和销售数据作为每一天的列。所以它会像:

日期 错误 销售 错误 1 Sales-1 错误 2 Sales-2 错误 3 Sales-3 ...
7/1 1 10 ...
7/2 2 12 1 10 ...
7/3 3 15 2 12 1 10 ...
7/4 4 20 3 15 2 12 1 10 ...
7/5 5 21 4 20 3 15 2 12 ...
... ... ... ... ... ... ... ... ... ...

因此,Error-1 表示昨天的错误,Error-2 表示前 2 天的错误,Error-3 表示前 3 天的错误,依此类推

我目前的解决方案是保持自加入 7 次:

t1.date = t2.date - 1day
t1.date = t2.date - 2day
t1.date = t2.date - 3day...

但显然这是一个非常丑陋的方法,并且查询时间很长。有没有更快的方法来做到这一点?

解决方法

假设您在表中有每天的数据(如您的样本数据),只需使用 lag()

select date,error,sale,lag(error,1) over (order by date) as prev1_error,lag(sale,1) over (order by date) as prev1_sale,2) over (order by date) as prev2_error,2) over (order by date) as prev2_sale,3) over (order by date) as prev3_error,3) over (order by date) as prev3_sale,. . .
from t;

遗憾的是,Amazon Athena 不(完全)支持 range between 窗口规范。如果您错过了几天,那么您有三个选择:

  1. 重新定义问题以获取表中可用的最后 7 天并使用上述解决方案。
  2. 添加缺少的日期。
  3. 使用 join 解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。