У меня есть 2 таблицы, одна из которых содержит информацию о городе (в игре), а другая содержит оценки, записанные за периоды дня.Примеры таблиц были упрощены.
CREATE TABLE cities(
cid INT(100),
name VARCHAR(100),
updatedAt DATETIME
);
CREATE TABLE cl_scores(
cid INT(100),
score INT(255),
updatedAt DATETIME
);
Я пытаюсь собрать список баллов для конкретного города.Список должен содержать только MAX (updatedAt) дату и оценку за каждый день.Вот что у меня есть:
SELECT a.cid, b.name, a.score, a.updatedAt FROM ci_scores AS a
JOIN cities AS b ON a.cid = b.cid
JOIN (SELECT MAX(updatedAt) AS maxUpdatedAt FROM ci_scores
GROUP BY DATE(updatedAt)) AS L ON DATE(L.maxUpdatedAt) = DATE(a.updatedAt)
WHERE a.cid = 10158241 ORDER BY a.updatedAt ASC;
Однако, он не возвращает ни одной записи для каждого дня.Фактически он возвращает каждую строку в таблице ci_scores и просто добавляет поле имени, как показано ниже:
+----------+---------+-------+---------------------+
| cid | name | score | updatedAt |
+----------+---------+-------+---------------------+
| 10158241 | Genesis | 3087 | 2012-03-13 04:04:03 |
| 10158241 | Genesis | 3207 | 2012-03-13 17:48:56 |
| 10158241 | Genesis | 3255 | 2012-03-14 00:44:11 |
| 10158241 | Genesis | 3262 | 2012-03-14 10:21:05 |
| 10158241 | Genesis | 3262 | 2012-03-14 13:42:42 |
+----------+---------+-------+---------------------+
Что я делаю неправильно в своем запросе ???
Решения решены
SELECT a.cid, b.name, a.score, a.updatedAt FROM ci_scores AS a
JOIN cities AS b ON a.cid = b.cid
JOIN (SELECT MAX(updatedAt) AS maxUpdatedAt FROM ci_scores
GROUP BY DATE(updatedAt) LIMIT 1) AS L ON L.maxUpdatedAt = a.updatedAt
WHERE a.cid = 10158241 ORDER BY a.updatedAt ASC;
Это не сработало, удаление DATE () = DATE () возвращает 0 записей, так как времена разные.Если я добавлю это обратно, оно возвращает:
+----------+---------+-------+---------------------+
| cid | name | score | updatedAt |
+----------+---------+-------+---------------------+
| 10158241 | Genesis | 3087 | 2012-03-13 04:04:03 |
| 10158241 | Genesis | 3207 | 2012-03-13 17:48:56 |
+----------+---------+-------+---------------------+
Это неверно, мне нужна 1 запись на каждый день, и эта запись является последней, введенной в этот день.