group by是不是在mysql的where子句中工作?

时间:2016-12-04 18:26:34

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

您好我有两个表,一个是用户,另一个是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

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

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`;

1 个答案:

答案 0 :(得分: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`;