0

我有一份报告需要显示客户的第一次访问和最近一次访问。我非常依赖 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;
4

0 回答 0