问题:当我们想要按周看数据时,一般指的是自然周,也就是我们熟知的本周一到被本周日。但有时候随着业务运营策略的不同,我们可能并不会按自然周去看,会有一个业务周的定义,比如上周五到本周四为一个业务周。这就涉及了我们如何将每一天的数据归属到这天所在的业务周,这就是本章想要讨论的问题。
自然周的定义和求解:先说简单的,对于自然周,我们把自然周的周一定为该周的周id。在hive中我们想要获取任一日期所在的周id时,可以按照如下语法计算:利用next_day(yourdate,weekday)函数计算给定日期的下一个weekday所在的日期,这里weekday为英文星期几的缩写;比如这里因为要以当前日期所在周的周一为周id,所以可以利用next_day得到当前日期的下一个周一的日期,然后利用date_sub函数-7天,即可得到当前周的周一日期。
--给定日期所在的自然周id
select date_sub(next_day(your_date,'mon'),7) week_id;
--给定日期所在的自然周的开始和结束日期
select
date_sub(next_day(your_date,'mon'),7) week_start_date
,date_sub(next_day(your_date,'mon'),1) week_end_date;