mysql——去重并获取最新记录

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: mysql——去重并获取最新记录

引言


最近有一个统计的需求,一个案件在崔记中有多条记录,我们需要根据崔记表中的最新一条记录来判断此时案件的状态,并且需要按天统计,也就说今天的最新案件状态,不能覆盖掉昨天的案件的最新状态。


20180729113910222.png


刚开始我用了mysql 中的一个求差集ide函数,sql如下:

SELECT COUNT(1) FROM robot_collection_record AS b WHERE
                    NOT EXISTS (
                        SELECT
                            1
                        FROM
                            robot_collection_record
                        WHERE
                            case_id = b.case_id
                        AND b.create_time <![CDATA[ < ]]>create_time
                    )


这条SQL语句实现查询结果的去重并且通过字段排序,其中case_id是去重的字段,create_time是排序的字段。


但是当我在查看结果的时候发现,只有统计今天的数量是正确的,但是如果加上一些条件,统计历史数据就会出现问题。


最后自己动手直接写了一个sql,来满足上面需求:

SELECT
            COUNT(1)
        FROM
            robot_collection_record a
        WHERE
            a.create_time IN (
                SELECT
                    m.createTime
                FROM
                    (
                        SELECT DISTINCT
                            (q.case_id),
                            max(q.create_time) createTime
                        FROM
                            (
                                SELECT
                                    *
                                FROM
                                    robot_collection_record
                                WHERE
                                    partner_id = ${partnerId}
                                AND ${startTime} <![CDATA[ <= ]]> create_time
                                AND create_time <![CDATA[ <= ]]> ${endTime}
                            ) q
                        GROUP BY
                            q.case_id
                    ) m
            )
        AND a.robot_answer_state = 1;

上面的sql就可以满足了。


小结


其实这个需求还是比较常见,但是这需要我们根据自己的表设计和一些业务需求,来转换成我们的sql,所以sql功底在一些图标统计功能上还是比较明显,如果我们能灵活的运用一些mysql内置的函数,写起sql还是非常精简的,小编的sql功底很是不好呀,还需要在这上面下工夫。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
125 0
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-基础查询-语句&演示(查询多个字段 / 所有字段/并设置别名/去重)
【MySQL】DQL-基础查询-语句&演示(查询多个字段 / 所有字段/并设置别名/去重)
|
关系型数据库 MySQL 索引
MySQL中去重 distinct 和 group by 是如何去重的
MySQL中去重 distinct 和 group by 是如何去重的
140 0
|
SQL 存储 关系型数据库
MySQL去重和设置别名
MySQL去重和设置别名
88 0
|
关系型数据库 MySQL 数据库
MySql刷题------查询结果去重
在编程过程中,特别是数据库查询时经常会涉及到去重的问题
|
关系型数据库 MySQL 数据库
记录学习MySql常用函数
记录学习MySql常用函数
188 16
|
关系型数据库 MySQL 数据库
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
1043 0
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
|
存储 SQL 关系型数据库
mysql实现查询分组查询最后一次的记录
mysql实现查询分组查询最后一次的记录
208 0
mysql实现查询分组查询最后一次的记录
|
存储 SQL 关系型数据库
mysql实现查询分组查询最后一次的记录
mysql实现查询分组查询最后一次的记录
161 0
mysql实现查询分组查询最后一次的记录
|
关系型数据库 MySQL 数据库
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询2
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询
113 0
MySQL数据库基础学习Day2:条件查询,排序、限制和去重操作,聚合查询,分组查询2