gpt4 book ai didi

mysql - 从 IsoWeek 获取开始日期

转载 作者:行者123 更新时间:2023-11-29 15:19:41 27 4
gpt4 key购买 nike

我想在我们的仓库中显示每周来自 Google Analytics 的用户数量。我每周通过我们的 ETL 接收原始数据,并以字符串形式接收 iso 周数据:GaIsoYearIsoWeek:'201951' 对应的用户编号为整数。为了进一步计算用户数量(例如计算每个用户的 session ),我需要日期格式的 iso 周的开始日期。我尝试过使用“to_date”函数和其他函数,但尝试从周数返回日期时会失败。提取年份有效,但提取星期无效。有人可以帮忙吗?谢谢!

最佳答案

据我了解,您想从年份/日期值获取开始日期。也许这会有所帮助:

SELECT SUBSTR( mydate, 1, 4) as target_year, SUBSTR( mydate, 5 ) as week,
IFF( SUBSTR( mydate, 5 ) = 1, to_date( SUBSTR( mydate, 1, 4), 'YYYY'),
dateadd( week, SUBSTR( mydate, 5 )-2, dateadd( day, 1, LAST_DAY(to_date( SUBSTR( mydate, 1, 4), 'YYYY'), week)))) AS firt_day_of_week
FROM VALUES ('20191'), ('20192'), ('201912'),('201951') t (mydate);

第一行只是显示解析的值,重要的部分是 IFF block 。它检查是否请求一年中的第一周,并返回一年中的第一天。如果我们不是在寻找第一周,它会根据一周的最后一天函数计算一周的第一天:)

这是上面的输出:

enter image description here

新:我不知道第一周有规则。如果 1 月 1 日是星期一、星期二、星期三或星期四,则位于 W01 中。所以我更新了查询:

SELECT SUBSTR( mydate, 1, 4) as target_year, SUBSTR( mydate, 5 ) as week, 
IFF( (SUBSTR( mydate, 5 ) = 1 and DAYOFWEEK(to_date(target_year,'YYYY')) NOT IN (0,5,6) ), to_date(target_year,'YYYY'),
DATEADD( week, SUBSTR( mydate, 5 )-2 + IFF(DAYOFWEEK(to_date(target_year,'YYYY')) IN (0,5,6) ,1 , 0) ,
DATEADD( day, 1, LAST_DAY(TO_DATE( SUBSTR( mydate, 1, 4), 'YYYY'), week )))) AS firt_day_of_week
FROM VALUES ('202101'), ('202001'), ('201701'),('200301'), ('201951') t (mydate);

+-------------+------+------------------+
| TARGET_YEAR | WEEK | FIRT_DAY_OF_WEEK |
+-------------+------+------------------+
| 2021 | 01 | 2021-01-04 |
| 2020 | 01 | 2020-01-01 |
| 2017 | 01 | 2017-01-02 |
| 2003 | 01 | 2003-01-01 |
| 2019 | 51 | 2019-12-16 |
+-------------+------+------------------+

希望现在没问题,因为我没有正确测试它。

关于mysql - 从 IsoWeek 获取开始日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59453837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com