一、目的

指标需要查询以工作日和周末维度的数据统计,因此需要根据数据的日期判断这一天属于星期几,周一到周五为工作日,周六到周日为周末

二、SQL查询

(一)SQL语句

select

day,

case when pmod(datediff(create_time,'2023-05-02') + 1,7) = 1 then '周一'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 2 then '周二'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 3 then '周三'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 4 then '周四'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 5 then '周五'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 6 then '周六'

else '周日' end as week_time

from hurys_dc_dwd.dwd_statistics

group by day, case when pmod(datediff(create_time,'2023-05-02') + 1,7) = 1 then '周一'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 2 then '周二'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 3 then '周三'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 4 then '周四'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 5 then '周五'

when pmod(datediff(create_time,'2023-05-02') + 1,7) = 6 then '周六'

else '周日' end;

(二)SQL语句查询结果

今天是2023年9月26日,周二!

(三)注意点

2023-05-02为任意一天的周二,不是选周一或者周日,这个可以自行验证!

-----------------------------------------20240201更新-----------------------------------------

本来以为SQL里日期选择任一周二即可,结果发现这是在没有执行调优语句前提下才有用

如下图所示,没有执行Hive调优

在这种情形下,以前的周二2023-05-02是有用的,今天是2024-02-01,周四

但是,如果执行Hive调优后,比如

set hive.vectorized.execution.enabled=false;

执行调优后,如果还是SQL里还是周二,就查询结果有问题

结果是2024-02-01,周三,但是今天却是周四!!!!

因此,在执行Hive调优后,必须将以前的周二2023-05-02改为周一2023-05-01

所以,在执行Hive调优后,SQL里的日期应该为周一

最后,总结一下,SQL执行后应该对结果进行检查,不同的情形说不定会有不同的结果!

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: