【发布时间】:2015-06-11 04:48:11
【问题描述】:
我创建了一个返回日期范围之间结果的查询,但是之前的开发人员通过将日期保存为 MySQL 中的 varchar(10) 以及两种格式(Y-m-d 和 d-m-Y )。
我的问题是,当我从 01-June-2015 到 11-June-2015 的日期之间选择结果时,它给了我 18 June 2015 的结果。
但是,当我选择从 01-june-2014 到 11-June-2015 的日期之间的结果时,它给了我 13 结果June 2015必须是18结果。
任务:获取某个日期范围内的新访客总数,但日期不在访客表中,所以我从访客表中获取他的第一次访问日期这就是我使用 MIN() 函数的原因
MySQL 查询是:
SELECT min(visits.id), t.id, t.first_name,
visits.date_check_in
FROM `visitor` `t`
JOIN `visit` `visits` ON visits.visitor = t.id
WHERE
((STR_TO_DATE(visits.date_check_in, '%d-%m-%Y') BETWEEN
STR_TO_DATE('11-06-2014', '%d-%m-%Y') AND STR_TO_DATE('11-06-2015',
'%d-%m-%Y'))
OR (STR_TO_DATE(visits.date_check_in, '%Y-%m-%d') BETWEEN
STR_TO_DATE('2014-06-11', '%Y-%m-%d') AND STR_TO_DATE('2015-06-11',
'%Y-%m-%d')) )
AND (t.is_deleted = 0)
AND (visits.is_deleted = 0)
AND (visits.visit_status != 2)
GROUP BY `t`.`id`
请帮助我我做错了什么。我花了大约 4 天的时间思考和做不同的事情,但被卡住了。 希望尽快收到您的来信,谢谢。
【问题讨论】:
-
我建议您通过将日期格式更改为 MySQL 日期格式来更正表格。您可以编写 PHP 脚本来使用该表的主键来更新日期。这样它就会解决这种意想不到的结果。
-
亲爱的,它是一个大的网络仪表板,这些日期已在大约 6 到 7 个地方用于插入、更新和报告,这需要更多的努力来纠正这些地方。
-
如果您使用聚合函数,您必须对所有选定的列进行分组。在 mysql 中它不需要,但是你会得到意想不到的结果
-
不能对所有列进行分组