У меня есть таблица результатов, которая выглядит следующим образом:
score_id, uid, af_id, level, record_date
Где uid
- это идентификатор пользователя в системе. af_id
- это фокус, на котором был установлен уровень. af_id
будет либо 1,1, 1,2, 1,3. Level
- целочисленное значение в диапазоне от 3 до 7.
Пример набора данных будет:
1, 2, 1.1, 4, 2012-09-02
2, 2, 1.2, 4, 2012-09-02
3, 2, 1.3, 3, 2012-09-02
4, 2, 1.3, 4, 2012-11-30
Мне нужно запросить базу данных, чтобы узнать, какой уровень достиг пользователь для каждого af_id
между определенными датами. Я использую GROUP_CONCAT
, чтобы привести данные в один ряд. Мой запрос работает в течение первого периода времени, но после этого выдает дубликаты. Мой SQL до сих пор:
SELECT u.uid, u.forename, u.surname, ui.gender, GROUP_CONCAT(us.level ORDER BY us.af_id SEPARATOR ',') AS levels
FROM users u
LEFT OUTER JOIN user_scores us
ON us.uid=u.uid AND us.record_date > '2012-09-01' AND us.record_date < '2012-10-20'
JOIN user_info ui ON ui.uid =u.uid
GROUP BY u.uid
ORDER BY u.surname ASC
Это дает результат:
Joe Bloggs M 4,4,3
Я хочу расширить месяцы, чтобы мой запрос мог возвращать обновленные результаты для af_id. Так что, если я расширю результаты, они будут варьироваться между 2012-09-01 и 2012-12-31. Я хотел бы видеть следующие результаты:
Joe Bloggs M 4,4,4
Однако мой запрос (с использованием вышеуказанного SQL) возвращает следующий результат:
Joe Bloggs M 4,4,3,4
Любая помощь с этим была бы очень признательна. Заранее спасибо.