我在MYSQL中有一个名为注册的表,包含以下字段:id,user,estimated_date。
这种情况下的值是:
id, user, estimated_date
1, 1, 2015-10-10
2, 1, 2015-10-10
3, 2, 2015-10-20
4, 2, 2015-10-10
我想为每个用户选择一行:具有max(estimated_date)的行。但是如果estimated_date相等则必须选择具有max(id)的那个。换句话说......按照estimated_date和id(按此顺序)排序的组。
输出应为:
2, 1, 2015-10-10
3, 2, 2015-10-20
我现在有了这个代码:
SELECT * from enrollments m
INNER JOIN
(SELECT user,
max(estimated_date) AS maxdate
FROM enrollments
GROUP BY user
) x ON m.user = x.user
AND m.estimated_date = x.maxdate
你能帮帮我吗?我一直在寻找,但我找不到适合这种情况的任何东西......谢谢!
答案 0 :(得分:1)
您不需要INNER JOIN
,只需ORDER by estimated_date DESC, id DESC
即可。这是您的查询:
Select * FROM (
SELECT
DISTINCT `id`, `user`, `estimated_date`
FROM
enrollments
ORDER by estimated_date DESC, id DESC
) as X
GROUP BY user
这里充满了小提琴:http://sqlfiddle.com/#!9/31799/3