假设我有这样的查询:

select 
week(sr.transactionDate) AS week_number,
sum(sr.digitalEarnings)
from
sales_report as sr
where `sr`.`transactionDate` BETWEEN '2022-05-01' AND '2022-12-31'
group by week_number
order by week_number;

它返回的数据如下:

enter image description here

我知道这是"一年中的一周"数字,但实际上我正在try 将数据分成从1开始的周.即这段时间中的第1周,这段时间中的第2周等等.

我该如何做到这一点呢?

推荐答案

您可以直接从交易日期计算周数.假设您保持DEFAULT_WEEK_FORMAT系统变量不变,则从周日开始执行周操作;调整范围开始日期以查找当天或之前的周日,并计算从该日期到事务处理日期的周数,增加1以从第1周开始,而不是从第0周开始:

floor(datediff(sr.transactionDate,'2022-05-01' - interval dayofweek('2022-05-01')-1 day) / 7) + 1

我强烈建议根本不要使用Week();它的跨年限或接近年头或年末的行为对于报告目的通常是不友好的.特别是,减go 或比较两周的值可能会有问题.

Mysql相关问答推荐

MySQL查询基于上次访问时间戳更新用户的问题

插入时发生日期时间字段溢出错误

如何合并有多行的json列

从MySQL JSON列中检索数组中的所有答案

从连接表中try 按唯一ID计算行数 MySQL

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

Mysql如何分行分词

MySQL如何将字符串列表与子查询进行比较

MySQL如何在小时和分钟之间 Select 时间

SQL从字典中的键获取值

查询以从约会表中获取可用空档

MYSQL如何将虚拟列添加到现有表中

如何使用 C++ 连接 mySQL 数据库

在 MySQL 的存储过程中调用存储过程

你如何在 Node.js 中模拟 MySQL(没有 ORM)?

在 WHERE 子句中使用 mysql concat()?

启用 NO_BACKSLASH_ESCAPES 选项时如何转义文字百分号?

在网页的 HTML 表中显示 MySQL 数据库表中的值

MySQL获取两个值之间的随机值

在 PHP 中运行 MySQL *.sql 文件