如何在where-MYSQL中使用max(date)

如何在where-MYSQL中使用max(date),mysql,database,Mysql,Database,我在where子句中使用max(date)时遇到问题 我的表中有重复的数据,有些数据没有任何重复的值,我需要从每个重复的值中选择最新的数据,每当我在where子句中使用max(date)时,我就会出现“invalid function”错误 样本表 id user_id name date 1 1 Bob 2019-11-12 18:00:00 2 1 Alice 2019-11-12 16:15:15 3

我在where子句中使用
max(date)
时遇到问题

我的表中有重复的数据,有些数据没有任何重复的值,我需要从每个重复的值中选择最新的数据,每当我在where子句中使用max(date)时,我就会出现“invalid function”错误

样本表

id   user_id  name        date
1       1      Bob        2019-11-12 18:00:00
2       1      Alice      2019-11-12 16:15:15
3       2      Josh       2019-11-08 16:15:15
4       3      Dina       2019-11-09 16:15:15
5       4      Jena       2019-11-07 16:15:15
以下是我的示例输出:


id   user_id  name        date
1       1      Bob        2019-11-12 18:00:00
3       2      Josh       2019-11-08 16:15:15
4       3      Dina       2019-11-09 16:15:15
5       4      Jena       2019-11-07 16:15:15

所以它只有4个输出,因为用户id
1
有一个重复的值,我只需要从中选择最新的日期

这是我的问题

SELECT name
FROM sample
GROUP BY user_id
WHERE date = max(date);
即使使用group by和order by,我仍然无法从每个复制值中获取最新日期

但是我有一个
无效函数的错误
任何帮助都将不胜感激。提前感谢

试试这个

select e.name from
sample e 
inner join
    (select user_id, max(date) as dt from sample
    group by user_id) as t1 on t1.user_id = e.user_id and t1.dt = e.date

如果您使用的是MySql 8.0或更高版本,则可以使用
行号

select * from (
    select *, row_number() over (partition by user_id order by date desc) rn from sample
) a where rn = 1;
对于较旧版本,您必须执行
JOIN

select s1.* from sample s1
join (
    select user_id, max(date) date from sample group by date
) s2 on s1.user_id = s2.user_id and s1.date = s2.date;
我想没关系

SELECT a.`name` FROM (
SELECT *
FROM sample
ORDER BY `date` DESC
) AS a 
GROUP BY a.`name`

您可以尝试以下操作:

SELECT name
FROM sample
GROUP BY user_id
WHERE date = (SELECT MAX(date) FROM sample)

请在代码中添加一些解释,以便其他人可以从中学习。你改变了什么?为什么?