如果我有一个包含以下结构和数据的表:
id | user_id | created_at
-------------------------
1 | 7 | 0091942
2 | 3 | 0000014
3 | 6 | 0000890
4 | 6 | 0029249
5 | 7 | 0000049
6 | 3 | 0005440
7 | 9 | 0010108
我将使用什么查询来获得以下结果(以下说明):
id | user_id | created_at
-------------------------
1 | 7 | 0091942
6 | 3 | 0005440
4 | 6 | 0029249
7 | 9 | 0010108
如你所见:
user_id
只返回一行。created_at
的行是返回的行。有没有办法在不使用子查询的情况下完成?相关代数说法中有一个名称,这个程序是通过吗?
答案 0 :(得分:6)
该查询称为groupwise maximum,(在MySQL中,至少)可以使用子查询实现。例如:
SELECT my_table.* FROM my_table NATURAL JOIN (
SELECT user_id, MAX(created_at) created_at
FROM my_table
GROUP BY user_id
) t
在sqlfiddle上查看。
答案 1 :(得分:2)
您可以通过user_id获取max和group:
select id,user_id,max(created_at)
from supportContacts
group by user_id
order by id;
以下是它的输出:
ID USER_ID MAX(CREATED_AT)
1 7 91942
2 3 5440
3 6 29249
7 9 10108
查看工作demo here
请注意,小提琴上的示例使用created_at字段作为int,只使用您的格式,它应该没有区别。
编辑:我会将此答案作为参考,但请注意,他的查询会产生不希望的结果,正如戈登所说,请不要在生产中使用它。