我需要选择账单并创建特定的每周日历。
这是我的查询
SELECT billing_date FROM tabde GROUP BY week(billing_date);
我得到的是2016年2月的结果
$result = array(
array('billing_date' => '2016-01-01'),
array('billing_date' => '2016-01-03'),
array('billing_date' => '2016-01-10'),
array('billing_date' => '2016-01-17'),
array('billing_date' => '2016-01-24')
);
这是重复的,因为这两天都在同一周内
array('billing_date' => '2016-01-01'),
array('billing_date' => '2016-01-03'),
答案 0 :(得分:3)
您对YEARWEEK
的工作原理感到困惑。来自reference:
返回日期的年份和周数。结果中的年份可能是 不同于第一个和第二个日期参数中的年份 今年的最后一周。
2016年1月1日举行的(不那么奇怪的)会议是在2015年的第52周,因为它是星期五; 1月3日是星期日,而不是2016年的第1周。您可以使用可选的第二个参数mode
稍微改变这种机制,它允许您指定一周的第一天。有关详细信息,请参阅docs for the WEEK
function。
修改强>
由于您似乎正在寻找按月一周分组数据的方法,因此您可以尝试以下方法:
GROUP BY FLOOR((DAYOFMONTH(billing_date) - 1) / 7) + 1
基本上,您将日期数除以7(进行必要的计算调整)。这是来自similar question,并附带了类似的警告:分割数据有点奇怪。特别是,这假设您始终计算从该月的第一天开始计算的周数,当然,不同的月份将有不同的周数。不过,它应该做你想做的事。
答案 1 :(得分:2)
这是重复的,因为这两天都在同一周内
那么,这取决于你考虑一周开始的那一天!
如果您查看yearweek()函数的mysql文档,那么您将看到它有第二个可选参数,称为模式:
mode参数与WEEK()的mode参数完全相同。对于 单参数语法,使用模式值0。
如果您在week() function下查找mode
参数的含义,那么您会看到0表示星期日被视为一周的第一天。 2016-01-03
是一个星期天。