当我想按月分组时,我正在使用这个 sql 在 MySQL 5.7 中进行分组:
select
max(statistic_time) as statistic_time
from home_overview_daily
group by date_format(FROM_UNIXTIME(statistic_time/1000), '%Y-%m')
order by statistic_time desc
但是当我按周分组时:
select
max(statistic_time) as statistic_time
from home_overview_daily
group by date_format(FROM_UNIXTIME(statistic_time/1000), '%Y-%m-%w')
order by statistic_time desc
结果数据如下所示:
1640789999999 2021-12-3
1640703599999 2021-12-2
1640617199999 2021-12-1
1640530799999 2021-12-0
1640444399999 2021-12-6
1640357999999 2021-12-5
1640271599999 2021-12-4
1638284399999 2021-11-2
1638197999999 2021-11-1
1638111599999 2021-11-0
1638025199999 2021-11-6
1637938799999 2021-11-5
1637852399999 2021-11-4
1637765999999 2021-11-3
为什么第 12 个月有 7 周?我在哪里做错了?我正在使用这样的格式%Y-%m-%u
:
select
max(statistic_time) as statistic_time,
date_format(FROM_UNIXTIME(statistic_time/1000), '%Y-%m-%u')
from home_overview_daily
group by date_format(FROM_UNIXTIME(statistic_time/1000), '%Y-%m-%u')
order by statistic_time desc
但结果是这样的:
1640789999999 2021-12-52
1640530799999 2021-12-51
1639925999999 2021-12-50
1639321199999 2021-12-49
1638716399999 2021-12-48
1638284399999 2021-11-48
1638111599999 2021-11-47
1637506799999 2021-11-46
1636901999999 2021-11-45
1636297199999 2021-11-44
每个月有5周?
周数由格式字符串的 、 和
%u
说明%U
符控制。返回值在 0(1)-53 范围内。对于按周分组,您需要一个日期格式,例如.%v
%V
date_format
%Y-%u
%w
说明符代表一周内的天数。等等。
一种方法是查看周数,忽略年月界限:
n
是 0 到 6 之间的某个数字,基于一周中的那一天是“第一天”。w
是周数。然后向后工作以查找该周从哪个日期开始:
例子:
(不要使用@变量;这里使用它们是为了方便演示。)