如何在where-MYSQL中使用max(date)
我在where子句中使用如何在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
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个输出,因为用户id1
有一个重复的值,我只需要从中选择最新的日期
这是我的问题
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)
请在代码中添加一些解释,以便其他人可以从中学习。你改变了什么?为什么?