文章目录

  • 函数说明
  • Bug现象
  • 解决
  • 获取当前周、周的开始、结束时间
    • 示例:

函数说明

  • 命令格式
bigint weekofyear (datetime <date>)
  • 参数说明
    date:必填。DATETIME类型日期值。格式为yyyy-mm-dd hh:mi:ss。如果输入为STRING类型,且MaxCompute项目的数据类型版本是1.0,则会隐式转换为DATETIME类型后参与运算。
  • 注意事项
    这一周算上一年还是下一年,取决于这一周的大多数日期(4天以上)在哪一年。算在前一年,就是前一年的最后一周;算在后一年就是后一年的第一周。

Bug现象

SELECT  WEEKOFYEAR(DATE '2021-01-01');
-- 53

上面的53 实际上是2020年的第53周

一般我们算一年的周数都是按照下面的sql处理的

SELECT CONCAT('2021',WEEKOFYEAR(DATE '2021-01-01'));
-- 202153

这样的话问题就来了,他其实是202053才对。因此我们不能简单的使用concat拼上年份,而是动态拼上year

解决

SELECT YEAR(date_sub(next_day('2021-01-01','monday'),4))*100 + WEEKOFYEAR(DATE '2021-01-01');
-- 202053
  • next_day函数

NEXT_DAY(date,char)
date参数为日期型,
char:为1–7或Monday/Mon~Sunday/

指定时间的下一个星期几(由char指定)所在的日期,
char也可用1~7替代,1表示星期日,2代表星期一

获取当前周、周的开始、结束时间

[0-6]
//周的开始时间
DATE_SUB(TO_DATE(ds,'yyyymmdd'),WEEKDAY(TO_DATE(ds,'yyyymmdd'))) as week_start,
//周的结束时间
DATE_SUB(TO_DATE(ds,'yyyymmdd'),WEEKDAY(TO_DATE(ds,'yyyymmdd')) - 6) as week_end

示例:

需求: 按周求uid的pv

SELECT  COUNT(DISTINCT uid),weekdate,collect_set(week_start)[0] as week_start,collect_set(week_end)[0] as week_end
FROM (SELECT uid,TO_DATE(ds,'yyyymmdd'),CONCAT(YEAR(date_sub(next_day(TO_DATE(ds,'yyyymmdd'),'monday'),4)) ,'年第' ,WEEKOFYEAR(TO_DATE(ds,'yyyymmdd')),'周' ) AS weekdate,DATE_SUB(TO_DATE(ds,'yyyymmdd'),WEEKDAY(TO_DATE(ds,'yyyymmdd'))) as week_start,DATE_SUB(TO_DATE(ds,'yyyymmdd'),WEEKDAY(TO_DATE(ds,'yyyymmdd')) - 6) as week_endFROM huorong_bigdata.base_huorongsoftware_source01_detailWHERE fid IN (1,2,3,4,41,46) AND recname = 'Ransom/LockFile.ii'AND  ds >= '20221221' AND ds <= '20230301'
)t1
GROUP BY weekdate;

weekofyear跨年问题相关推荐

  1. MySQL查询7天内过生日的用户 查询生日是今天的用户 解决跨年问题

    MySQL查询生日是今天的用户 select * from customer where MONTH(birthday) = MONTH(NOW()) and DAY(birthday) = DAY( ...

  2. mysql 查询上一周每一天的数据(含跨年问题)

    今天在写一个关于上一周每天的流量数据查询,起初的想法是用week函数来处理这个问题,用week函数减一,然后按WEEKDAY来分组,即可得到上周的数据. SELECT WEEKDAY(a.leave_ ...

  3. 警惕由于使用YYYY-MM-dd引发的一场生产问题

    文章目录 一.问题复现 一.问题原因 写在前面: 我是「境里婆娑」.我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信念丝毫未减,眼前这个少年,还是最初那张脸,面前再多艰险不退却. 写博 ...

  4. 查询七天之内所有生日的客户

    这里并没有考虑跨年的问题(跨年问题正在解决中) SELECT sysctr.csr_birthday AS '生日', usr.user_title AS '登录名', sysctr.csr_name ...

  5. [MySQL]--gt;查询5天之内过生日的同事中的闰年2月29日问题的解决过程

    前言: 上次写了查询5天之内过生日的同事中的跨年问题的解决过程,网址为:http://blog.csdn.net/mchdba/article/details/38952033 ,当中漏了一个闰年2月 ...

  6. calender get方法_Calendar.get()方法--- WEEK_OF_YEAR 、MONTH、

    1. WEEK_OF_YEAR   一年中的第几周 由于西方的一周指的是:星期日-星期六,星期日是一周的第一天,星期六是一周的最后一天, 所以,使用 calendar.get(Calendar.WEE ...

  7. VUE获取节日(中国节+国际节)

    现在网上的开源节日基本都是做的节假日相关,本文为单纯的获取节日信息提供一个思路. 先上效果图: 首先,节日分为两部分:中国节和国际节,因为要分阳历和阴历,所以问题点就在这里. 转载 https://g ...

  8. SQL取日期为当前月份的第几周思路

    问题背景 获取每个月的第几周包含跨年问题 当前有一份从20010101到20201231的数据,现在需要获得每个日期对应在每个月中的第几周,为了实现日历展示的那种格式 展示对应日期所在的是该月份的第几 ...

  9. c语言金字塔输出乘法表,python中打印金字塔和九九乘法表的几种方法

    # 打印九九乘法表 for i in range(1,10): for j in range(1,i+1): # x=i*j # print(i,'*',j,'=',x,end=' ') print( ...

最新文章

  1. 关于零拷贝的一点认识
  2. JS转字符 判断数字等
  3. 1581: 统计成绩-一题简单的坑题
  4. 携程发布2021第三季度财报:营收53亿元 国际国内旅游市场“攻守”同发力
  5. Jeewx企业号系统入门配置指南
  6. Ubuntu如何启动Pycharm
  7. MFC工作笔记0007---消息映射处理
  8. 滴滴、小米启动造车,特斯拉的护城河还能守多久?
  9. leecode第二百九十二题(Nim游戏)
  10. Splunk 模式的中国践行者——日志易让日志分析更容易
  11. Word文档或PDF转图片
  12. 苹果Mac系统设置任何来源安装第三方软件
  13. fedora14配置无线连接
  14. PLC编程入门梯形图实例讲解
  15. 教育培训机构的信息化管理,要先从这四大业务场景做起
  16. 快手java商业化_快手-商业化-日常实习-一面-凉经+吐槽
  17. Linkcloud:IP独立计费将云主机的灵活性推向极致
  18. 江苏机器人竞赛南航_关于公布2020年南航金城学院首届大学生机器人比赛暨江苏省大学生机器人大赛校内选拔赛的评审结果的通知...
  19. 计算机毕业设计Python+django大学生闲置二手交易商城平台(源码+系统+mysql数据库+Lw文档)
  20. 探索Apache Hudi核心概念 (1) - File Layouts

热门文章

  1. linux的基础简答题,Linux认证考试试题及答案「简答题」
  2. 从0到100全流程构建「数据指标体系」
  3. Wind River workbench小结
  4. mysqllongblob
  5. 笨办法学Python 25
  6. 如何在 Win上写 Python 代码?最佳攻略来袭
  7. ASP对接国际验证码接口DEMO示例
  8. python和javascript哪个好学-python和js哪个难学
  9. FusionCharts简单教程(一)---建立第一个FusionCharts图形
  10. Linux 文件名和路径的最大长度