也许有人可以给我一些建议,以实现我的目标。 我正在使用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次对我来说有点混乱,因为我必须在此处将其他数据(例如用户信息等)连接起来
非常感谢, 最高
答案 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()