クライアントの最初の訪問と最新の訪問を表示する必要があるというレポートがあります。私は 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 人以上の学生がおり、彼らがいつ来て、何が来ないかを報告する必要があります。最初の行に気づいたら、最初の訪問は 04 年 6 月ですか? しかし、最新の訪問は5月29日ですか??
次の問題は 2 行目です (これは想定どおりに機能します) 通知は 5 月 15 日 -> 最初の訪問、次に 5 月 28 日の最新の訪問です。(これはいい)。
月名のキーワードの違いに問題はありますか? 5月/6月?
私はこれと本当に混乱しています。
これは私のクエリです:
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;