【问题标题】:GROUP BY LAST DATE MYSQL按最后日期分组 MYSQL
【发布时间】:2013-12-04 13:51:15
【问题描述】:

我有这张桌子,

user
  id
  name

visit
  id
  id_user (fk user.id)
  date
  comment

如果我执行这个查询,

SELECT u.id, u.name, e.id, e.date, e.comment
FROM user u
LEFT JOIN visit e ON e.id_user=u.id

我明白了,

1 Jhon 1 2013-12-01 '1st Comment' 
1 Jhon 2 2013-12-03 '2nd Comment' 
1 Jhon 3 2013-12-01 '3rd Comment'

如果我GROUP BY u.id,那么我得到

1 Jhon 1 2013-12-01 '1st Comment'

我需要 Jhon 的最后一次访问

1 Jhon 3 2013-12-04 '3rd Comment'

我试试这个

SELECT u.id, u.name, e.id, MAX(e.date), e.comment
FROM user u
LEFT JOIN visit e ON e.id_user=u.id
GROUP BY u.id

还有这个,

SELECT u.id, u.name, e.id, MAX(e.date), e.comment
FROM user u
LEFT JOIN visit e ON e.id_user=u.id
GROUP BY u.id 
HAVING MAX(e.date)

我得到了

1 Jhon 1 2013-12-04 '1st Comment'

但这对我无效...我需要该用户的最后一次访问

1 Jhon 3 2013-12-01 '3rd Comment'

谢谢!

【问题讨论】:

    标签: mysql sql date group-by having


    【解决方案1】:

    这应该为您提供每个用户的最后一条评论:

    SELECT u.id, u.name, e.id, e.date, e.comment
    FROM user u
    LEFT JOIN (SELECT t1.*
      FROM visit t1
        LEFT JOIN visit t2
          ON t1.id_user = t2.id_user AND t1.date < t2.date
      WHERE t2.id_user IS NULL
      ) e ON e.id_user=u.id
    

    【讨论】:

    • 谢谢!对于同一天的访问,我添加了 ORDER BY DESC t1.id DESC
    【解决方案2】:
    SELECT u.id, u.name, e.id, e.date, e.comment
    FROM user u
    LEFT JOIN visit e ON e.id_user=u.id
    ORDER BY e.date desc
    LIMIT 1;
    

    【讨论】:

    • 如果他只想要一个用户的结果,这是理想的,但如果他想要不止一个用户(我相信他这样做),这将行不通
    • 公平点。只是继续我对OP的解释。特别是“但这对我无效......我需要该用户的最后一次访问”。所以我猜想那里会有一个where 子句......
    【解决方案3】:

    使用:

    SELECT u.id, u.name, e.id, e.date, e.comment FROM user u LEFT JOIN visit e ON e.id_user=u.id order by e.date DESC limit 0,1
    

    将按日期显示 1 个记录顺序。

    希望能有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2011-03-23
      • 2012-09-26
      • 2013-12-27
      • 2010-10-31
      • 2019-02-14
      相关资源
      最近更新 更多