我在where子句中使用max(date)
时遇到问题。
我的表中有重复的数据,有些数据没有任何重复的值,我需要从每个重复的值中选择最新的数据,每当我在where子句中使用max(日期(时,我都会出现"无效函数"错误
sample table
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个输出,因为user_id1
有一个重复的值,我只需要从中选择最新的日期
这是我的查询
SELECT name
FROM sample
GROUP BY user_id
WHERE date = max(date);
即使我使用groupby和orderby,我仍然无法从每个重复的值中获得最新日期。
但是我有一个invalid function
的错误任何帮助都将不胜感激。预付款感谢
您可以尝试以下操作:
SELECT name
FROM sample
GROUP BY user_id
WHERE date = (SELECT MAX(date) FROM sample)
试试这个。
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或更新版本,则可以使用ROW_NUMBER
:
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`