假设我有这个查询:
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;
它返回如下数据:
我知道这是“一年中的周数”,但我实际上是想把数据从1开始分成几周。即,此阶段的第1周,此阶段的第2周等。
我该怎么做呢?
3条答案
按热度按时间vaqhlq811#
您可以直接从交易日期计算周数。假设default_week_format系统变量保持不变,则以Sunday开始计算周;调整您的范围起始日期,以查找当天或之前的星期日,并计算从该日期到事务处理日期的周数,添加一个以从第1周开始,而不是从第0周开始:
我强烈建议不要使用week();其跨年度或接近年度开始或结束时的行为通常不利于报告目的。特别是减去或比较两周的值可能是有问题的。
y0u0uwnf2#
使用
ROW_NUMBER()
如何?尽管这只在v8及以上版本中可用:https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number
1hdlvixo3#
你可以用一些数学常识:
或者这个:
第一个将从1开始对周进行编号,第二个可能从例如如果过滤数据从2022-05-15开始,则为3。这两个查询都可能有完全缺失周的间隙。