LeeAtomic
2017-10-24 07:46
采纳率: 75%
浏览 13.7k

mysql根据用户iD分组,并获取分组内的最新时间的一条记录

mysql根据用户iD分组,并获取分组内的最新时间的一条记录;

图片说明

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

9条回答 默认 最新

  • 琉星之云 2017-11-04 09:15
    已采纳

    select * from 表名 group by 用户ID having max(时间);

    已采纳该答案
    评论
    解决 3 无用 5
    打赏 举报
  • 瞳孔里的阳光 2017-10-24 08:12

    方法一:

     SELECT * FROM (
    SELECT * FROM guess_detail ORDER BY update_time DESC) GROUP BY guess_user_id;
    

    此方法适用于mysql 5.8以下,目前5.8版本分组内的排序会被忽略,所以不能使用。效率一般,小数据量可用。方法二更加通用,且效率更高。

    方法二:

     SELECT * FROM (
    SELECT temp.*, @rn := IF(@prev = guess_user_id,@rn + 1,1) AS rn, @prev = guess_user_id FROM 
    (SELECT * FROM guess_detail ORDER BY update_time DESC) temp
    JOIN (SELECT @rn := 0) AS vars
    ) t WHERE t.rn = 1;
    

    此方法不仅可以获取最新的,还可以获取每组内最新的前几条(与rn=?有关)

    评论
    解决 4 无用 1
    打赏 举报
  • aillience 2017-10-24 07:56

    是分组统计吗?按id分组再按时间排序最后取top1数据。。是这个意思吗?

    评论
    解决 无用
    打赏 举报
  • Tsui丶 2017-10-24 07:57

    mysql 和 sqlserver又没什么区别 直接 group by id order by time desc

    评论
    解决 无用
    打赏 举报
  • 一只小T 2017-10-24 08:03

    select * from where group by id order by time desc 就是最新的

    评论
    解决 无用
    打赏 举报
  • LeeAtomic 2017-10-24 08:32

    图片说明

    效果图如图

    评论
    解决 无用
    打赏 举报
  • sinat_38913556 2017-10-24 08:32
    SELECT id, (select top 1 otherColumn from 表1 t2
    where t1.id = t2.id
    order by t2.time desc ) AS otherColumn
    FROM 表1 AS t1
    GROUP BY id;
    

    sqlserver 语句

    评论
    解决 无用
    打赏 举报
  • 琉星之云 2017-11-03 12:05

    你的时间格式是什么?

    评论
    解决 无用
    打赏 举报
  • 大白不乖 2017-10-24 08:51

    SELECT MAX(update_time) FROM table GROUP BY guess_user_id;

    评论
    解决 无用 1
    打赏 举报

相关推荐 更多相似问题