当前位置: 首页 > news >正文

句容建设局网站广东网站制作公司

句容建设局网站,广东网站制作公司,河北住房城乡建设厅官方网站,t型布局网站怎么做一、问题 按每年的1月1日算当年的第一个自然周 (遇到跨年也不管#xff0c;如果1月1日是周三#xff0c;那么到1月5号#xff08;周日#xff09;算是本年的第一个自然周, 如果按周一是一周的第一天) 计算是本年的第几周#xff0c;那么 spark sql 如何写 ? 二、分析 …一、问题 按每年的1月1日算当年的第一个自然周 (遇到跨年也不管如果1月1日是周三那么到1月5号周日算是本年的第一个自然周, 如果按周一是一周的第一天) 计算是本年的第几周那么 spark sql 如何写 ? 二、分析 难点 : Spark SQL 的 DAYOFWEEK 函数返回的每周第一天是周日。边界值的处理即第一周如何判定、第二周从哪天开始计算。 对应的伪代码 int day_of_week(int day) {if ( day 7) {return 1;} else {return day 1;} }dayofyear DAYOFYEAR(your_date_column) if(dayofyear 7 - day_of_week(first_day_of_year_week_number) 1) {return 1; } else {return ceil( (dayofyear - 1) / 7.0); }先给出 sql 关键逻辑 CASE WHEN DAYOFWEEK(your_date_column) 1 THEN 7ELSE DAYOFWEEK(your_date_column) - 1 END AS day_of_week,CASE WHEN DAYOFWEEK(to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd)) 1 THEN 7ELSE DAYOFWEEK(to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd)) - 1 END AS first_day_of_year_week_number,to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd) as first_day_of_year,// 上面的 sql 是内层CASE WHEN DAYOFYEAR(your_date_column) 8 - first_day_of_year_week_number THEN 1ELSE CEIL( (DAYOFYEAR(your_date_column) - day_of_week ) / 7.0 ) 1 END AS week_number, 多找一些边界值测试一下。 DAYOFWEEK(your_date_column)分别返回 周日 周一 周二 周三 周四 周五 周六 1 2 3 4 5 6 7如果要让周一是第一天那么需要调整偏移量 int day_of_week(int day) {if ( day 7) {return 1;} else {return day 1;} }调整后的函数逻辑 周一 周二 周三 周四 周五 周六 周日 1 2 3 4 5 6 7sql 逻辑 CASE WHEN DAYOFWEEK(your_date_column) 1 THEN 7ELSE DAYOFWEEK(your_date_column) - 1END AS day_of_week,2023-01-01 年是周日, 那么 DAYOFWEEK(your_date_column) 返回的是 1即本周第一天。 WEEKOFYEAR(your_date_column) 返回的是 52, 即 2022 年最后一周。 但实际上我们要求的结果应该是 2023 年的第一周。 2023-01-02 年是周一, 那么 DAYOFWEEK(your_date_column) 返回的是 2即本周第二天。 WEEKOFYEAR(your_date_column) 返回的是 1, 即 2023 年第一周。 但实际上我们要求的结果应该是 2023 年的第二周。 三、验证 drop table your_table;CREATE TABLE your_table (id INT,your_date_column DATE );CREATE OR REPLACE TEMPORARY VIEW temp_view AS SELECT 1 as id, to_date(2023-01-01, yyyy-MM-dd) as your_date_column UNION ALL SELECT 2, to_date(2023-01-02, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-03, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-04, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-05, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-06, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-07, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-08, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-09, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-10, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-11, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-12, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-13, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-14, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-15, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-16, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-17, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-18, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-19, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-20, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-21, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-22, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-23, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-24, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-25, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-26, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-27, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-28, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-29, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-30, yyyy-MM-dd) UNION ALL SELECT 2, to_date(2023-01-31, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-01, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-02, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-03, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-04, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-05, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-06, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-07, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-08, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-09, yyyy-MM-dd) UNION ALL SELECT 3, to_date(2023-02-15, yyyy-MM-dd) UNION ALL SELECT 4, to_date(2023-12-31, yyyy-MM-dd) UNION ALL SELECT 5, to_date(2024-01-01, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-02, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-03, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-04, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-05, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-06, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-07, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-08, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-09, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-10, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-11, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-12, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-13, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-14, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-15, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-16, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-17, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-18, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-19, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-20, yyyy-MM-dd) UNION ALL SELECT 6, to_date(2024-01-21, yyyy-MM-dd) ;INSERT INTO your_table SELECT * FROM temp_view;SELECT your_date_column,DAYOFYEAR(your_date_column),8 - first_day_of_year_week_number,(DAYOFYEAR(your_date_column) - day_of_week ),(DAYOFYEAR(your_date_column) - day_of_week ) / 7.0 ,CEIL( (DAYOFYEAR(your_date_column) - day_of_week ) / 7.0 ),CEIL( (DAYOFYEAR(your_date_column) - day_of_week ) / 7.0 ) 1,CASE WHEN DAYOFYEAR(your_date_column) 8 - first_day_of_year_week_number THEN 1ELSE CEIL( (DAYOFYEAR(your_date_column) - day_of_week ) / 7.0 ) 1END AS week_number, // 所求的结果* FROM (SELECT|,your_date_column,DAYOFWEEK(your_date_column),DAYOFYEAR(your_date_column),CASE WHEN DAYOFWEEK(your_date_column) 1 THEN 7ELSE DAYOFWEEK(your_date_column) - 1END AS day_of_week,CASE WHEN DAYOFWEEK(to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd)) 1 THEN 7ELSE DAYOFWEEK(to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd)) - 1END AS first_day_of_year_week_number, // 每年第一天是周几如果是周一返回 1周日返回 7to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd) as first_day_of_year, // 每年第一天的日期date_format(your_date_column, EEEE) as WEEKFROMyour_table ); 2023-01-01 1 1 -6 -0.857143 0 1 1 | 2023-01-01 1 1 7 7 2023-01-01 Sunday 2023-01-02 2 1 1 0.142857 1 2 2 | 2023-01-02 2 2 1 7 2023-01-01 Monday 2023-01-03 3 1 1 0.142857 1 2 2 | 2023-01-03 3 3 2 7 2023-01-01 Tuesday 2023-01-04 4 1 1 0.142857 1 2 2 | 2023-01-04 4 4 3 7 2023-01-01 Wednesday 2023-01-05 5 1 1 0.142857 1 2 2 | 2023-01-05 5 5 4 7 2023-01-01 Thursday 2023-01-06 6 1 1 0.142857 1 2 2 | 2023-01-06 6 6 5 7 2023-01-01 Friday 2023-01-07 7 1 1 0.142857 1 2 2 | 2023-01-07 7 7 6 7 2023-01-01 Saturday 2023-01-08 8 1 1 0.142857 1 2 2 | 2023-01-08 1 8 7 7 2023-01-01 Sunday 2023-01-09 9 1 8 1.142857 2 3 3 | 2023-01-09 2 9 1 7 2023-01-01 Monday 2023-01-10 10 1 8 1.142857 2 3 3 | 2023-01-10 3 10 2 7 2023-01-01 Tuesday 2023-01-11 11 1 8 1.142857 2 3 3 | 2023-01-11 4 11 3 7 2023-01-01 Wednesday 2023-01-12 12 1 8 1.142857 2 3 3 | 2023-01-12 5 12 4 7 2023-01-01 Thursday 2023-01-13 13 1 8 1.142857 2 3 3 | 2023-01-13 6 13 5 7 2023-01-01 Friday 2023-01-14 14 1 8 1.142857 2 3 3 | 2023-01-14 7 14 6 7 2023-01-01 Saturday 2023-01-15 15 1 8 1.142857 2 3 3 | 2023-01-15 1 15 7 7 2023-01-01 Sunday 2023-01-16 16 1 15 2.142857 3 4 4 | 2023-01-16 2 16 1 7 2023-01-01 Monday 2023-01-17 17 1 15 2.142857 3 4 4 | 2023-01-17 3 17 2 7 2023-01-01 Tuesday 2023-01-18 18 1 15 2.142857 3 4 4 | 2023-01-18 4 18 3 7 2023-01-01 Wednesday 2023-01-19 19 1 15 2.142857 3 4 4 | 2023-01-19 5 19 4 7 2023-01-01 Thursday 2023-01-20 20 1 15 2.142857 3 4 4 | 2023-01-20 6 20 5 7 2023-01-01 Friday 2023-01-21 21 1 15 2.142857 3 4 4 | 2023-01-21 7 21 6 7 2023-01-01 Saturday 2023-01-22 22 1 15 2.142857 3 4 4 | 2023-01-22 1 22 7 7 2023-01-01 Sunday 2023-01-23 23 1 22 3.142857 4 5 5 | 2023-01-23 2 23 1 7 2023-01-01 Monday 2023-01-24 24 1 22 3.142857 4 5 5 | 2023-01-24 3 24 2 7 2023-01-01 Tuesday 2023-01-25 25 1 22 3.142857 4 5 5 | 2023-01-25 4 25 3 7 2023-01-01 Wednesday 2023-01-26 26 1 22 3.142857 4 5 5 | 2023-01-26 5 26 4 7 2023-01-01 Thursday 2023-01-27 27 1 22 3.142857 4 5 5 | 2023-01-27 6 27 5 7 2023-01-01 Friday 2023-01-28 28 1 22 3.142857 4 5 5 | 2023-01-28 7 28 6 7 2023-01-01 Saturday 2023-01-29 29 1 22 3.142857 4 5 5 | 2023-01-29 1 29 7 7 2023-01-01 Sunday 2023-01-30 30 1 29 4.142857 5 6 6 | 2023-01-30 2 30 1 7 2023-01-01 Monday 2023-01-31 31 1 29 4.142857 5 6 6 | 2023-01-31 3 31 2 7 2023-01-01 Tuesday 2023-02-01 32 1 29 4.142857 5 6 6 | 2023-02-01 4 32 3 7 2023-01-01 Wednesday 2023-02-02 33 1 29 4.142857 5 6 6 | 2023-02-02 5 33 4 7 2023-01-01 Thursday 2023-02-03 34 1 29 4.142857 5 6 6 | 2023-02-03 6 34 5 7 2023-01-01 Friday 2023-02-04 35 1 29 4.142857 5 6 6 | 2023-02-04 7 35 6 7 2023-01-01 Saturday 2023-02-05 36 1 29 4.142857 5 6 6 | 2023-02-05 1 36 7 7 2023-01-01 Sunday 2023-02-06 37 1 36 5.142857 6 7 7 | 2023-02-06 2 37 1 7 2023-01-01 Monday 2023-02-07 38 1 36 5.142857 6 7 7 | 2023-02-07 3 38 2 7 2023-01-01 Tuesday 2023-02-08 39 1 36 5.142857 6 7 7 | 2023-02-08 4 39 3 7 2023-01-01 Wednesday 2023-02-09 40 1 36 5.142857 6 7 7 | 2023-02-09 5 40 4 7 2023-01-01 Thursday 2023-02-15 46 1 43 6.142857 7 8 8 | 2023-02-15 4 46 3 7 2023-01-01 Wednesday 2023-12-31 365 1 358 51.142857 52 53 53 | 2023-12-31 1 365 7 7 2023-01-01 Sunday 2024-01-01 1 7 0 0.000000 0 1 1 | 2024-01-01 2 1 1 1 2024-01-01 Monday 2024-01-02 2 7 0 0.000000 0 1 1 | 2024-01-02 3 2 2 1 2024-01-01 Tuesday 2024-01-03 3 7 0 0.000000 0 1 1 | 2024-01-03 4 3 3 1 2024-01-01 Wednesday 2024-01-04 4 7 0 0.000000 0 1 1 | 2024-01-04 5 4 4 1 2024-01-01 Thursday 2024-01-05 5 7 0 0.000000 0 1 1 | 2024-01-05 6 5 5 1 2024-01-01 Friday 2024-01-06 6 7 0 0.000000 0 1 1 | 2024-01-06 7 6 6 1 2024-01-01 Saturday 2024-01-07 7 7 0 0.000000 0 1 1 | 2024-01-07 1 7 7 1 2024-01-01 Sunday 2024-01-08 8 7 7 1.000000 1 2 2 | 2024-01-08 2 8 1 1 2024-01-01 Monday 2024-01-09 9 7 7 1.000000 1 2 2 | 2024-01-09 3 9 2 1 2024-01-01 Tuesday 2024-01-10 10 7 7 1.000000 1 2 2 | 2024-01-10 4 10 3 1 2024-01-01 Wednesday 2024-01-11 11 7 7 1.000000 1 2 2 | 2024-01-11 5 11 4 1 2024-01-01 Thursday 2024-01-12 12 7 7 1.000000 1 2 2 | 2024-01-12 6 12 5 1 2024-01-01 Friday 2024-01-13 13 7 7 1.000000 1 2 2 | 2024-01-13 7 13 6 1 2024-01-01 Saturday 2024-01-14 14 7 7 1.000000 1 2 2 | 2024-01-14 1 14 7 1 2024-01-01 Sunday 2024-01-15 15 7 14 2.000000 2 3 3 | 2024-01-15 2 15 1 1 2024-01-01 Monday 2024-01-16 16 7 14 2.000000 2 3 3 | 2024-01-16 3 16 2 1 2024-01-01 Tuesday 2024-01-17 17 7 14 2.000000 2 3 3 | 2024-01-17 4 17 3 1 2024-01-01 Wednesday 2024-01-18 18 7 14 2.000000 2 3 3 | 2024-01-18 5 18 4 1 2024-01-01 Thursday 2024-01-19 19 7 14 2.000000 2 3 3 | 2024-01-19 6 19 5 1 2024-01-01 Friday 2024-01-20 20 7 14 2.000000 2 3 3 | 2024-01-20 7 20 6 1 2024-01-01 Saturday 2024-01-21 21 7 14 2.000000 2 3 3 | 2024-01-21 1 21 7 1 2024-01-01 Sunday Time taken: 8.512 seconds, Fetched 63 row(s)在这个查询中 date_format 函数的第二个参数 EEEE 指定返回完整的星期名称如 Monday, Tuesday 等。 DAYOFYEAR(your_date_column) 计算出年中的天数。 DAYOFWEEK(your_date_column) 返回一周中的某天以周日为一周的第一天。 // 直接求结果整理后的 sql 表达式 SELECT your_date_column,CASE WHEN DAYOFYEAR(your_date_column) 8 - first_day_of_year_week_number THEN 1ELSE CEIL( (DAYOFYEAR(your_date_column) - day_of_week ) / 7.0 ) 1END AS week_number FROM (SELECTyour_date_column,CASE WHEN DAYOFWEEK(your_date_column) 1 THEN 7ELSE DAYOFWEEK(your_date_column) - 1END AS day_of_week,CASE WHEN DAYOFWEEK(to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd)) 1 THEN 7ELSE DAYOFWEEK(to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd)) - 1END AS first_day_of_year_week_number,to_date(CONCAT( cast(YEAR(your_date_column) as string), -01-01), yyyy-MM-dd) as first_day_of_year,date_format(your_date_column, EEEE) as WEEKFROMyour_table );2023-01-01 1 2023-01-02 2 2023-01-03 2 2023-01-04 2 2023-01-05 2 2023-01-06 2 2023-01-07 2 2023-01-08 2 2023-01-09 3 2023-01-10 3 2023-01-11 3 2023-01-12 3 2023-01-13 3 2023-01-14 3 2023-01-15 3 2023-01-16 4 2023-01-17 4 2023-01-18 4 2023-01-19 4 2023-01-20 4 2023-01-21 4 2023-01-22 4 2023-01-23 5 2023-01-24 5 2023-01-25 5 2023-01-26 5 2023-01-27 5 2023-01-28 5 2023-01-29 5 2023-01-30 6 2023-01-31 6 2023-02-01 6 2023-02-02 6 2023-02-03 6 2023-02-04 6 2023-02-05 6 2023-02-06 7 2023-02-07 7 2023-02-08 7 2023-02-09 7 2023-02-15 8 2023-12-31 53 2024-01-01 1 2024-01-02 1 2024-01-03 1 2024-01-04 1 2024-01-05 1 2024-01-06 1 2024-01-07 1 2024-01-08 2 2024-01-09 2 2024-01-10 2 2024-01-11 2 2024-01-12 2 2024-01-13 2 2024-01-14 2 2024-01-15 3 2024-01-16 3 2024-01-17 3 2024-01-18 3 2024-01-19 3 2024-01-20 3 2024-01-21 3 Time taken: 0.493 seconds, Fetched 63 row(s) 23/11/14 14:27:07 INFO SparkSQLCLIDriver: Time taken: 0.493 seconds, Fetched 63 row(s)
http://www.hkea.cn/news/14291376/

相关文章:

  • 购物网站模板建设刷单网站
  • nh网站建设外贸市场推广
  • 企业网站 wordpress王野天启鸿源
  • 招商加盟网站建设高坪网站建设
  • 湖北省黄冈建设信息网站环保网站策划书
  • 太原网站建设360龙岩天宫山有开放吗
  • 百度竞价排名查询seo按天计费系统源码
  • 百度收录网站有什么好处iis7.5搭建网站
  • 渌口区市政建设局网站桑福生物科技网站开发
  • 网站怎么做图片室内设计效果图在哪里找
  • 在什么文件中加入什么代码告诉搜索引擎蜘蛛网站地图的文件位置?上海智能模板建站
  • 荥阳网站建设多少钱求网站晚上睡不着2021
  • 查询关键词密度网站的网址有哪些小众电商平台有哪些
  • 常德经开区网站官网wordpress安装系统
  • 规划电子商务网站网站建设公司设计网页的工具
  • 莆田建站服务鼎豪网络网站建设
  • 网站建设项目收获网站开发需要代码吗
  • 邢台网站建设有哪些自己怎么创网站
  • 我为本公司想建个网站长沙城乡建设部网站首页
  • 网站落地页和普通网页网页设计作业5000字
  • 可以做动画的网站都有哪些厦门网站建设网络推广
  • 揭阳自助建站wordpress wechat
  • 服务器搭建网站域名配置广州专业做网站
  • 网站建设与维护设计报告沈阳网站制作公司和服务器
  • 宁波做网站网站建设和微信小程序
  • 合肥做个网站什么价格便宜wordpress简约新闻自媒体主题
  • 建设企业网站目的石家庄网站服务
  • 福州公司网站建设一定要用主流程序php语言义乌外贸论坛
  • 福建住建设厅官方网站关于建设学校网站的报告书
  • 网站开发代码用什么软件杭州 app开发公司