Mysql: получить последний ряд к двум датам - PullRequest
0 голосов
/ 18 сентября 2018

Может быть, кто-то может дать мне совет, как достичь моей цели.Я использую 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 раза само по себе выглядит для меня немного беспорядочно, потому что я должен объединить здесь дополнительные данные (такие как информация о пользователе и т. Д.)

Большое спасибо, Макс

1 Ответ

0 голосов
/ 18 сентября 2018

Вы можете просто попробовать это -

SELECT *
FROM `history` H1
INNER JOIN (SELECT user_id, MAX(from_dt) max_from
            FROM history
            GROUP BY user_id) users
ON H1.`date_create` = users.max_from
WHERE from_dt < NOW()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...