关于分组:技术分享-MySQL-分组需求探秘
作者:刘晨 网名 bisal ,具备十年以上的利用运维工作教训,目前次要从事数据库利用研发能力晋升方面的工作,Oracle ACE ,领有 Oracle OCM & OCP 、EXIN DevOps Master 、SCJP 等国内认证,国内首批 Oracle YEP 成员,OCMU 成员,《DevOps 最佳实际》中文译者之一,CSDN & ITPub 专家博主,公众号"bisal的集体杂货铺",长期保持分享技术文章,屡次在线上和线下分享技术主题。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 前两天共事有个 MySQL 数据分组的需要,如下测试数据,须要找出每个 name 分组中 create_date 最近的记录: 须要留神的是,此处用的 MySQL 是5.6,最后是应用这条语句: select name, value, create_date, update_date from t1 group by name order by create_date desc;查问后果如下,看着如同是对的,然而认真看下,就会发现其中的问题,例如 name=a 最近的 create_date 应该是 value=3 的记录,name=d 最近的create_date应该是 value=10 的记录: 用这条 SQL 失去的其实只是每个 name 分组中最先插入的记录,而后依照 create_date 进行了降序排列,和原始需要,齐全不同。 此时可采纳分而治之的策略,先做排序,再做分组: select * from (select name, value, create_date, update_date from t1 order by create_date desc) t group by t.name;即可失去原始需要的数据: 当然,针对此需要,可能有其余办法,有趣味的敌人,能够尝试写写,共享一下。 可能有仔细的敌人会发现个问题,就是上述 SQL 中的 group by ,如同有些奇怪,如果依照惯例,select 中的字段须要呈现在 group by 中,上述语句居然没报错? 如果咱们在 MySQL 5.7 执行雷同的语句: ...