【MySQL】计算日期是当前月份的第几周

这篇具有很好参考价值的文章主要介绍了【MySQL】计算日期是当前月份的第几周。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

力扣题

1、题目地址

2993. 发生在周五的交易 I

2、模拟表

表:Purchases

Column Name Type
user_id int
purchase_date date
amount_spend int
  • (user_id, purchase_date, amount_spend) 是该表的主键(具有唯一值的列)。
  • purchase_date 的范围从 2023 年 11 月 1 日到 2023 年 11 月 30 日,并包括这两个日期。
  • 每一行包含 user id,purchase date 和 amount spend。

3、要求

  • 编写一个解决方案,计算用户在 2023 年 11 月 的 每个星期五 的 总花费。
  • 输出所有在 周五 有购买记录的周。
  • 按照每月的周次序 升序 排列结果表。

4、示例

输入:

Purchases 表:

user_id purchase_date amount_spend
11 2023-11-07 1126
15 2023-11-30 7473
17 2023-11-14 2414
12 2023-11-24 9692
8 2023-11-03 5117
1 2023-11-16 5241
10 2023-11-12 8266
13 2023-11-24 12000

输出:

week_of_month purchase_date total_amount
1 2023-11-03 5117
4 2023-11-24 21692

解释:

  • 在 2023 年 11 月的第一周,于 2023-11-03 星期五发生了总额为 $5,117 的交易。
  • 对于 2023 年 11 月的第二周,于 2023-11-10 星期五没有交易。
  • 同样,在 2023 年 11 月的第三周,于 2023-11-17 星期五没有交易。
  • 在 2023 年 11 月的第四周,于 2023-11-24 星期五发生了两笔交易,分别为 $12,000 和 $9,692,总计为 $21,692。
  • 输出表按照 week_of_month 升序排列。

5、代码编写

我的写法

SELECT CEILING((DAY(purchase_date)+WEEKDAY(purchase_date-INTERVAL DAY(purchase_date)-1 DAY)) / 7) AS week_of_month, 
       purchase_date, 
       SUM(amount_spend) AS total_amount
FROM Purchases
WHERE WEEKDAY(purchase_date) = 4
AND YEAR(purchase_date) = '2023'
AND MONTH(purchase_date) = '11'
GROUP BY week_of_month
ORDER BY week_of_month

代码分析

例子:purchase_date = ‘2023-11-03’

1、本月第几天,结果为 3

SELECT DAY(purchase_date);

2、本月第一天日期,结果为 2023-11-01

SELECT purchase_date - INTERVAL DAY(purchase_date)-1 DAY;

3、本月第一天是周几,结果为 2(周三),会发现 WEEKDAY(月份第一天) 的结果值刚好是补齐日期矩阵需要的天数
【MySQL】计算日期是当前月份的第几周,# MySQL,mysql

SELECT WEEKDAY(purchase_date - INTERVAL DAY(purchase_date)-1 DAY);

4、当前天数加上补齐日期矩阵需要的上月占用的天数(相当于是第一周补全),结果为 5

3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32
SELECT DAY(purchase_date) + WEEKDAY(purchase_date - INTERVAL DAY(purchase_date)-1 DAY);

5、从上面图很清晰可以看出可以用7的倍数去区分哪一周,第一周除以每周的天数 7,并向上取整,最终结果为 1

SELECT CEIL((DAY(purchase_date) + WEEKDAY(purchase_date - INTERVAL DAY(purchase_date)-1 DAY)) / 7);

网友代码(WEEK函数mode参数选择,比较合理)

思路:计算日期(2023-11-03)周数减去当前日期第一天(2023-11-01)周数加一,就可以算出日期是当月第几周

SELECT WEEK(purchase_date, 1) - WEEK('2023-11-01', 1) + 1 AS week_of_month,
	   purchase_date,
       SUM(amount_spend) AS total_amount
FROM Purchases
WHERE WEEKDAY(purchase_date) = 4
GROUP BY purchase_date
GROUP BY purchase_date

WEEK函数接受两个参数:

  • date是要获取周数的日期。
  • mode是一个可选参数,用于确定周数计算的逻辑。
    它允许您指定本周是从星期一还是星期日开始,返回周数应在 0 到 52 之间或 0 到 53 之间。
    mode参数在一些网站上写的很多都细节不够,不容易理解,可以看下面参考里面的

参考

MySQL 计算当前日期属于本月第几周
MySQL week() 函数及参数 mode 详解文章来源地址https://www.toymoban.com/news/detail-821692.html

到了这里,关于【MySQL】计算日期是当前月份的第几周的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element-ui 月份选择器,当所选月份为当前月时,获取当天日期 。非当前月时,获取所选月的最后一天

    根据需求: 起始日期和结束日期的设置,当所选月份为当前月时,获取当天日期 。 非当前月时,获取所选月的最后一天  全部代码: 1、 Date.parse() 函数用于分析一个包含日期的字符串,并返回该日期与 1970 年 1 月 1 日午夜之间相差的毫秒数 Date.parse()的语法如下: 2、 获取

    2024年02月11日
    浏览(46)
  • win10电脑日历怎么显示第几周?

    win10自带日历,不过日历默认是只能显示日期和年份的,那么win10日历怎么显示周数呢,其实只需要打开日历中的设置,在其中就可以开启周数了。下面就来看看详细的操作。 win10电脑日历怎么显示第几周? 第一步:在左下角搜索框中输入“日历”。 第二步:打开搜索结果中

    2024年02月13日
    浏览(29)
  • 【C语言】P216 18.给出年月日,计算该日是该年的第几天

    P216 18.给出年月日,计算该日是该年的第几天 输入年月日,输出该日是该年的第几天。 算法如下: 判断该年是否为闰年,闰年2月有29天,平年2月有28天。 计算该月之前的天数总和,加上当月的天数,即为该日是该年的第几天。 例如,输入2021年3月15日,计算方法如下: 判断

    2024年02月04日
    浏览(27)
  • Hive日期函数应用之月份差值计算

    目前计算Hive月份差值有多种方法,下面介绍两种方法进行计算,各有优缺点 一个常见的方法是首先将日期转换为 Unix 时间戳(如果它们还不是的话),然后通过计算时间戳之间的差值,并将这个差值转换为月份。然而,这种方法并不总是准确的,因为它假设每个月都有相同

    2024年01月22日
    浏览(35)
  • 二百三十二、Kettle——修改MySQL中历史数据为当前系统日期并增量同步到ClickHouse中

    由于一些雷达死了但是又需要有数据进行展示,于是就把这些雷达的历史数据,修改日期为当前日期后,增量同步到ClickHouse中, 1、获取当前日期,并且修改历史数据的create_time字段的日期部分 2、如果采用增量表输出的话,还需要获取ClickHouse表中的最新时间,这样有2个变量

    2024年04月13日
    浏览(32)
  • MySQL中根据出生日期计算年龄

    创建student表 mysql create table student(                                                                                 -     sid int primary key comment \\\'学生号\\\',                                                      

    2024年01月18日
    浏览(32)
  • mysql 日期 计算 时间差 天数差

    第一种:TIMESTAMPDIFF函数 三个参数。第一个参数是比较的类型: FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY 、 WEEK 、 MONTH 、 QUARTER、 YEAR 几种类型。第二、三参数是时间, 后减前 : 第二种: DATEDIFF函数 两个参数。前减后。得到相差的天数。 NOW() 当前的年月日时分秒,如:2023-03-09

    2024年02月07日
    浏览(44)
  • mysql日期函数(查询最近n(天/月/年)、计算日期之间的天数等)

    mysql日期函数 目录 mysql查询最近一个月数据 返回当前日期和时间 将字符串转变为日期 日期 d 减去 n 天后的日期 计时间差,返回 datetime_expr2 − datetime_expr1 的时间差算 查询当天数据 ADDDATE(d,n) 计算起始日期 d 加上 n 天的日期 ADDTIME(t,n) n 是一个时间表达式,时间 t 加上时间表达

    2024年02月13日
    浏览(29)
  • MySQL 计算两个日期/时间之间相差的天数、分钟数、秒数...

    MySQL 中经常遇到计算两个日期或者时间之间相差的天数、周数、小时数、分钟、秒等等,下面分享一个MySQL内置的函数:TimeStampDiff() 这个函数是MySQL本身提供的可以计算两个时间间隔的函数。 语法: 返回日期或日期时间表达式 datetime_expr1 和datetime_expr2the 之间的整数差 其中

    2024年02月14日
    浏览(41)
  • MySQL根据出生日期计算年龄的五种方法比较

    方法一 缺陷,当日期为未来日期时结果为0,而不是负数; 这里用了5个函数和两个运算符。 方法二 解决了方法一为负数的问题,但看起来更复杂;这里使用了6个函数和3个运算符。 改良后方法一和方法二 改良后的方法一,少了一个函数和一个运算符,当日期为未来日期时计

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包