Hive SQL实现近N周的数据统计查询

文朱季谦先前遇到过一个需求,需要基于HIVE统计近N周范围的数据,例如,统计近7周范围的数据指标。需要用HIVE SQL去实现该功能,而HIVE SQL并没有PostgreSQL那样例如通过函数to_char((to_date(&

Hive SQL实现近N周的数据统计查询

文/朱季谦 先前遇到过一个需求,需要基于HIVE统计近N周范围的数据,例如,统计近7周范围的数据指标。

需要用HIVE SQL去实现该功能,而HIVE SQL并没有PostgreSQL那样例如通过函数to_char((to_date('202550', 'YYYWW') - INTERVAL '5 weeks'), 'yyyyww'))就可以实现202550和往前5周的202545周的查询(这里的50和45分别表示2025年的50周和45周)。

我当时通过百度和DeepSeek都没有找到合适的答案,还是思考了好几天才想明白怎么解决。

既然HIVE SQL没有函数可以直接实现取指定周与近N周的条件范围查询,是否可以有其他方式呢?

答案是肯定的。

我当时是通过额外建一个时间表,该表有天以及天对应的所在周,可以直接通过代码生成这样一张表date_week_table,直接 从2020年一直自动映射到2030年,该表的数据如下:

id

Day

Week

1

2020-01-01

202001

2

2020-01-02

202001

3

2020-01-03

202001

4

2020-01-04

202001

5

2020-01-05

202001

6

2020-01-06

202002

7

2020-01-07

202002

8

2020-01-08

202002

.......

......

......

当有这一张周表,而需要查询近N周范围数据的主表由有week字段,例如主表commerce_data是这样的——

id

order_id

customer_id

product_id

week

total_amount

1

ORD202315001

1001

5001

202501

5

2

ORD202315002

1002

5002

202452

10

3

ORD202315003

1003

5003

202451

22

4

ORD202315004

1004

5004

202450

1

5

......

......

......

......

......

这时,如果需要统计指定周和前N周的数据,就可以基于这两张表去实现。

例如,查出2025年第1周往前近4周的数据。

可以基于date_week_table周表计算2025年第1周往前近4周都有哪些周,HIVE SQL如下:

代码语言:javascript代码运行次数:0运行复制
select distinct week from date_week_table where week <= '202501' order by week desc limit 3

然后再基于commerce_data主表计算在2025年第1周往前近4周的数据——

代码语言:javascript代码运行次数:0运行复制
select 
sum(total_amount) 
from commerce_data 
where week in(select distinct week from date_week_table where week <= '202501' order by week desc limit 3) 
group by order_id

这样,就可以实现查询出指定周及指定周近N周的HIVE SQL查询了。

当然,也有童鞋可能会说,既然只是查询近N周范围,是否可以直接使用指定周,再减去N来差呢?

这里会有一个问题,2025年第一周,即202501,往前两周,分别是202452和202451,如果用指定周202501直接减2,得到的并不是202451。

以上,只是我个人的一个思路,如果还有其他基于HIVE SQL来计算指定周及近N周的计算,可以留言区一块分享讨论。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-30,如有侵权请联系 cloudcommunity@tencent 删除sqlhive函数数据统计

发布者:admin,转转请注明出处:http://www.yc00.com/web/1748065555a4726363.html

相关推荐

  • Hive SQL实现近N周的数据统计查询

    文朱季谦先前遇到过一个需求,需要基于HIVE统计近N周范围的数据,例如,统计近7周范围的数据指标。需要用HIVE SQL去实现该功能,而HIVE SQL并没有PostgreSQL那样例如通过函数to_char((to_date(&

    2小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信