Может быть, кто-то может дать мне совет, как достичь моей цели.Я использую MySQL
У меня есть таблица с историческими данными
CREATE TABLE `history` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
`from_dt` date NOT NULL,
`date_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`approved` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `parent_id` (`parent_id`),
)
Есть ли более простой способ получить набор данных с последними записями для каждого пользователя (user_id) в этой таблице, где from_dt
меньше now()
from_dt
- может содержать любую дату, поэтому могут быть записи в будущем и в прошлом.
Что я получил на данный момент:
SELECT * FROM `history` right join (SELECT
history.user_id, MAX(date_create)
FROM
history
RIGHT JOIN
(SELECT
user_id, MAX(from_dt) max_from
FROM
history
WHERE
from_dt < NOW()
GROUP BY user_id , from_dt) AS hf ON hf.max_from = history.from_dt
AND hf.user_id = history.user_id
GROUP BY user_id) as hdt on hdt.user_id = history.user_id
Но объединение таблиц 3 раза само по себе выглядит для меня немного беспорядочно, потому что я должен объединить здесь дополнительные данные (такие как информация о пользователе и т. Д.)
Большое спасибо, Макс