我有一份报告需要显示客户的第一次访问和最近一次访问。我非常依赖 mysql DATE_FORMAT 函数,并且对我使用该函数感到相当自信。但是,我注意到我无法完全掌握的异常情况。
我的报告 :
+-----------+-----------+------------+-------+---------------------+---------------------+
| A-Number | First | Last | Total | First Visit | Latest Visit |
+-----------+-----------+------------+-------+---------------------+---------------------+
| xxxxxxxxx | xxxxxxxx | xxxxxxx | 3 | Jun 04, 2013 - 3PM | May 29, 2013 - 3PM |
| xxxxxxxxx | xxxxxxx | xxxxxxxx | 2 | May 15, 2013 - 12PM | May 28, 2013 - 9AM |
| xxxxxxxxx | xxxxxxx | xxxxxxxxx | 2 | Jun 03, 2013 - 1PM | May 28, 2013 - 4PM |
| xxxxxxxxx | xxxxxx | xxxxxx | 1 | Apr 24, 2013 - 7PM | Apr 24, 2013 - 7PM |
+-----------+-----------+------------+-------+---------------------+---------------------+
这是实际数据。我有大约 1100 多名学生目前使用这个系统,我需要报告他们什么时候进来,什么时候不进来。如果您注意到第一行第一次访问是 6 月 4 日?但最近一次访问是 5 月 29 日??
下一个问题是第二行(它应该如何工作)通知 5 月 15 日 -> 第一次访问,然后是 5 月 28 日最后一次访问。(这很好)。
月份名称中的不同关键字是否有问题?五月/六月?
我真的很困惑。
这是我的查询:
SELECT
DATE_FORMAT(signintime, '%W %Y') Date,
student.anum 'A-Number',
student.first 'First',
student.last 'Last',
COUNT(session.anum) as Total,
MIN(DATE_FORMAT(session.signintime, '%b %d, %Y - %l%p')) as 'First Visit',
MAX(DATE_FORMAT(session.signintime, '%b %d, %Y - %l%p')) as 'Lastest Visit'
FROM student
INNER JOIN session
ON session.anum = student.anum
GROUP BY student.anum
ORDER BY Total desc;
编辑 1:
正如 piotrm 指出的那样修复:
SELECT
student.anum 'A-Number',
student.first First,
student.last Last,
COUNT(session.anum) Total,
DATE_FORMAT(MIN(session.signintime), '%b %d, %Y - %l%p') 'First Visit',
DATE_FORMAT(MAX(session.signintime), '%b %d, %Y - %l%p') 'Latest Visit'
FROM student
INNER JOIN session
ON session.anum = student.anum GROUP BY student.anum;