【问题标题】:Group by is not working with where in clause mysql?Group by 不适用于 mysql 中的 where 子句?
【发布时间】:2017-04-19 03:00:22
【问题描述】:

您好,我有两张表,一张是 user,另一张是 user_details

用户表是

id    name  
---------
1     John    
2     Tom         
3     Amy 
4     Kat

user_details 表是

id    user_id   money     created_on
------------------------------------
1       1        2000     2016-12-01
2       1        5000     2016-12-02
3       1        6000     2016-12-03
4       2        2050     2016-12-01
5       2        5020     2016-12-02
6       3        6000     2016-12-04

我需要像

这样的结果
name   user_id   money     created_on
------------------------------------
John       1        6000     2016-12-03
Tom        2        5020     2016-12-02
Amy        3        6000     2016-12-03
Kat        4        NULL     NULL

我的问题是我需要 user_details 表最近 created_on 的记录,为此我编写了以下查询,但我得到了所有结果,任何人都可以告诉我查询中有什么问题

SELECT * FROM `user` as `u` LEFT JOIN ( SELECT   user_id,money,created_on      FROM `user_details` WHERE created_on IN  (SELECT MAX(created_on) FROM    user_details group by user_id )) `userdata` ON `u`.`id` =  `userdata`.`user_id`;

【问题讨论】:

    标签: mysql group-by left-join where-in


    【解决方案1】:

    在您的内部子查询中,您只需按 user_id 分组,但不要按您当前在其他查询中选择的用户的 user_id 进行过滤。

    换句话说:您甚至不需要按 user_id 分组,只需在外部子查询中使用别名选择给定用户的MAX(created_on),如下所示:

    SELECT * FROM `user` as `u` LEFT JOIN 
        ( SELECT   user_id,money,created_on FROM `user_details` x WHERE created_on IN  
            (SELECT MAX(created_on) FROM user_details 
                   WHERE x.user_id = user_details.user_id)) 
            `userdata` ON `u`.`id` =  `userdata`.`user_id`;
    

    【讨论】:

    • 当我尝试使用 INTERVAL 时如何获取上个月的最大日期 - 一个月我没有得到数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2021-10-07
    • 2022-12-14
    • 1970-01-01
    • 2021-08-16
    • 2020-01-22
    相关资源
    最近更新 更多