【问题标题】:How to use the max(date) in where MYSQL如何在 MYSQL 中使用 max(date)
【发布时间】:2020-03-07 22:15:06
【问题描述】:

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

我的表中有重复数据,有些数据没有任何重复值,我需要从每个重复值中选择最新数据,每当我在 where 子句中使用 max(date) 时,我都有一个“无效功能”的错误

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_id 1 有一个重复的值,我只需要从中选择最新的日期。

这是我的查询

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

即使我使用 group by 和 order by,我仍然无法从每个重复值中获取最新日期。

但我遇到了invalid function 的错误 任何帮助将非常感激。提前谢谢

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    您可以尝试以下方法:

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

    【讨论】:

      【解决方案2】:

      试试这个。

      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
      

      【讨论】:

        【解决方案3】:

        如果您使用的是 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;
        

        【讨论】:

          【解决方案4】:

          我觉得还可以

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

          【讨论】:

          • 请在您的代码中添加一些解释,以便其他人可以从中学习。你有什么改变,为什么?
          猜你喜欢
          • 2020-03-05
          • 2017-11-24
          • 1970-01-01
          • 1970-01-01
          • 2019-08-30
          • 2021-04-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多