MySQL每行一行,具体取决于maxDate或maxId

时间:2015-09-25 15:09:36

标签: php mysql

我在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
你能帮帮我吗?我一直在寻找,但我找不到适合这种情况的任何东西......谢谢!

1 个答案:

答案 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

相关问题