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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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功底很是不好呀,还需要在这上面下工夫。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
消息中间件 SQL JSON
FlinkSQL 实时采集Kafka内容到MySQL(实战记录)
最近在做实时采集Kafka发布的内容到MySQL,本文记录一下关键的点,细节不再描述,希望能帮助到大家。
746 0
FlinkSQL 实时采集Kafka内容到MySQL(实战记录)
|
8月前
|
关系型数据库 MySQL 索引
MySQL中去重 distinct 和 group by 是如何去重的
MySQL中去重 distinct 和 group by 是如何去重的
83 0
|
8月前
|
SQL 存储 关系型数据库
MySQL去重和设置别名
MySQL去重和设置别名
53 0
|
9月前
|
关系型数据库 MySQL 数据库
MySql刷题------查询结果去重
在编程过程中,特别是数据库查询时经常会涉及到去重的问题
|
关系型数据库 MySQL 数据库
MySQL命令记录
MySQL编码 1.查看数据库编码格式 show create database <数据库名>; 2.查看数据表的编码格式 show create table <表名>; 3.创建数据库时指定数据库的字符集 create database <数据库名> character set utf8; 4.创建数据表时指定数据表的编码格式 create table tb_books( name varchar(45) not null, price double not null, bookCount int not null,
|
关系型数据库 MySQL 数据库
记录学习MySql常用函数
记录学习MySql常用函数
166 16
|
关系型数据库 MySQL 数据库
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
773 0
mysql:添加时间列自动更新时间(用于记录创建时间和修改时间)
|
SQL 关系型数据库 MySQL
校招面试题有了!——记录一个有趣的mySql查询
## 前言 最近在做一个内部系统的报表统计功能,遇到了一个麻烦的查询场景,因为对sql语句确实不太熟练,在网上查了一些资料,最终找到了一个解法。具体场景和表结构并不复杂,对sql大佬们来说应该也是小case,不过细想确实有趣,特此记录下来。 ## 问题 已知表A有列:主键id、日期date和标签tag,其中tag是逗号分割的多值字符串(值的集合size不超过25个),如下如示例。请统计某段时间(例
|
存储 SQL 关系型数据库
mysql实现查询分组查询最后一次的记录
mysql实现查询分组查询最后一次的记录
180 0
mysql实现查询分组查询最后一次的记录
|
前端开发 关系型数据库 MySQL
三言两语记录mysql for update锁
另一个连接B 发起普通select请求,正常返回结果 3.连接B 发起select for update请求,由于第一个步骤的事务还没有结束,所以不能获取,会一直堵塞,直到超时 或者锁被释放后返回
201 0