我有一份报告说我需要首先访问客户并进行客户的最新访问。我在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多名学生目前使用这个系统,我需要报告他们什么时候进来,什么不进来。如果您注意到第一行是第一次访问是在06年6月?但最近的访问可能是29?
下一个问题是第二行(这是如何工作的)通知可能15 - >第一次访问,然后可能是第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;