Mysql:通过两个日期获取最新行

时间:2018-09-18 14:43:46

标签: mysql join

也许有人可以给我一些建议,以实现我的目标。 我正在使用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 :(得分:0)

您可以简单地尝试-

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()