如何在一个sql中以每周和每月的粒度计算数据

Posted

技术标签:

【中文标题】如何在一个sql中以每周和每月的粒度计算数据【英文标题】:how to calculate data at daily weekly and monthly granularity in one sql 【发布时间】:2020-12-04 08:36:37 【问题描述】:

我在 S3 上有这种格式的数据 我在加入 2 个关键列后使用 athena 生成聚合结果

要求 -

在国家/地区级别,我必须计算每日、每周和每月级别的事件数 因此,对于日本在 10 月的两个事件中,每周应该显示一个事件作为结果。

预期结果 -

当我加入国家和 event_date == transaction_date

我如何在 SQL 中做同样的事情

【问题讨论】:

(1) 请以表格文本形式向我们展示您想要的结果 (2) 请使用您正在运行的数据库标记您的问题:mysql、Oracle、Postgres...? 您需要按国家或国家和 event_date 分组吗?如果两列都被使用,那么你返回多行,如果只有国家是这种情况,那么为什么 20201010 只返回。顺便说一句,event_date 的数据类型应该是日期,但似乎是字符串类型... 【参考方案1】:

嗯。 . .如果我关注您的问题,您可以在子查询中使用窗口函数,然后进行过滤:

select t.*
from (select t.*,
             count(*) over (partition by eventdate) as day_count,
             count(*) over (partition by week) as week_count,
             count(*) over (partition by month) as month_count
      from t
     ) t
where eventdate = :transactiondate

【讨论】:

以上是关于如何在一个sql中以每周和每月的粒度计算数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL:给定年份和月份,我如何计算每周的订单数

计算每月/每周级别的相关性

如何计算每天的时间戳条目数

如何将详细数据存储在数据仓库中以进行贷款处理?

MS SQL的每日,每周和每月报告

如何在 iOS 中按周/月/每 X 天添加开始日期和结束日期的余数?