一、实现效果:

蓝牙mac字段是相同的记录,排在一起,再按时间倒序,总体时间来说也需要倒序

二、SQL编写:

最开始的想法就是,那我直接按mac和时间排序不就好了

SELECT * FROM aca_be_lpresult ORDER BY mac DESC, update_date DESC

但是实际业务会有这样的的情况

1、同一个mac的记录,可能出现在不同的时间点

2、同一个时间点,可能有不同的mac记录

所以结果如下,两边都会出现乱序

同事提出为什么不先分组再排序呢,在认真解读这句话之后,我尝试看看

实现思路:

先写一个分组的SQL,按Mac分组,时间最大的排在前面,因为Mac是多个的,所以被分组的时间就取最大的即可

SELECT mac, COUNT( 1 ) AS count, MAX( update_date ) AS latest_date
FROM aca_be_lpresult
GROUP BY mac
ORDER BY MAX( update_date ) DESC

结果如下:

将这个分组的结果和主表进行相联:

SELECT a.* FROM aca_be_lpresult AS a
JOIN (
SELECT mac, COUNT( 1 ), MAX( update_date ) AS ud
FROM aca_be_lpresult
GROUP BY mac
ORDER BY MAX( update_date ) DESC
) AS b ON a.mac = b.mac

可以发现和直接查询主表没有任何差别 ...

此时我想起来可以先按分组表的顺序排序, 再按主表的顺序就实现了效果

最终SQL:

SELECT a.* FROM aca_be_lpresult AS a
JOIN (
SELECT mac, COUNT( 1 ), MAX( update_date ) AS ud
FROM aca_be_lpresult
GROUP BY mac
ORDER BY MAX( update_date ) DESC
) AS b ON a.mac = b.mac
ORDER BY b.ud DESC, a.update_date DESC

  

【MySQL】 将字段相同的记录排在一起,按时间倒序的更多相关文章

  1. MySQL 将某个字段值的记录排在最后,其余记录单独排序

    1.按 status 值 2 5 3 的顺序排序,值相同则按修改时间排序 order by FIELD(status,2,5,3),a.ModifyTime desc 2.将 status = 3 的 ...

  2. Mysql 拼接字段查询语句和join查询拼接和时间查询

    个人平时记录的,有点乱 1.修改时间字段,如果时间字段的类型是date或者是datetime类型的 update 表名 set 时间字段 = DATE_FORMAT(NOW(),'%Y-%m-%d % ...

  3. mysql text字段判断是否为空

    mysql text字段判断是否为空 mysql text字段为空select * from `tableName` where `textField` is null or `textField` ...

  4. 修改MySQL中字段的类型和长度

    MySQL修改字段类型的命令是: mysql> alter table 表名 modify column 字段名 类型; 假设在MySQL中有一个表为:address,有一个字段为city 初始 ...

  5. MySQL添加字段和删除字段

    MySQL添加字段应该如何实现呢?这是很多刚刚接触MySQL数据库的新人都提到过的问题,下面就为您介绍MySQL添加字段和删除字段的方法,希望对您能有所启迪. MySQL添加字段: alter tab ...

  6. PDO 查询mysql返回字段整型变为String型解决方法

    PDO 查询mysql返回字段整型变为String型解决方法 使用PDO查询mysql数据库时,执行prepare,execute后,返回的字段数据全都变为字符型. 例如id在数据库中是Int的,查询 ...

  7. mysql 修改字段长度

    mysql 修改字段长度 alter table news  modify column title varchar(130); alter table 表名 modify column 字段名 类型 ...

  8. mysql修改字段的语句写法

    http://www.111cn.net/database/mysql/50678.htm 下面为您介绍的sql语句都是mysql修改字段操作中的一些常用语句,如果您是一个刚刚接触mysql数据库的新 ...

  9. MySql 查询表字段数

    MySql 查询表字段数 SELECT COUNT(*) FROM information_schema.columns WHERE table_schema='test_cases' AND tab ...

  10. MySql增加字段、删除字段、修改字段

    MySql增加字段.删除字段.修改字段名称.修改字段类型   1.增加一个字段 alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; / ...

随机推荐

  1. C++笔记(13)数组的引用和引用的数组

    数组的引用 数组有二个特性,影响作用在数组上的函数:一是不能复制数组,二是使用数组名时, 数组名会自动指向其第一个元素的指针. 因为不能复制,所以无法编写使用数组类型的形参,数组会自动转化为指针.比如 ...

  2. [SWPUCTF 2021 新生赛]easy_sql

    这道题呢就是很简单的sql注入,我们直接用sqlmap来跑. 首先我们打开页面可以看见提示,参数为wllm **然后我们启动虚拟机,输入sqlmap的命令:sqlmap -u "url地址/ ...

  3. kettle从入门到精通 第二十一课 kettle Carte服务器

    1.相关配置文件 jdbc.properties保存在simple-jndi目录下,这个文件用来存储JNDI连接对象的连接参数.Kettle可以用JNDI的方式来引用JDBC连接参数,如IP地址.用户 ...

  4. 在线Token、随机密码生成工具

    在线生成自定义长度,包含大写或小写字母.数字或符号的随机字符串.无论你需要生成API访问令牌.账户激活令牌,还是随机密码字符串,它都能帮你快速完成. 在线Token.随机密码生成工具

  5. OOM异常的4种可能分析及常见的OOM异常演示

    OOM异常的4种可能分析及常见的OOM异常演示 OOM异常: OutOfMemoryError 1.JAVA堆溢出JAVA堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到这些对象之间 ...

  6. CloseableHttpClient设置超时时间demo 未设置默认是2分钟

    # CloseableHttpClient设置超时时间demo 未设置默认是2分钟 import org.apache.http.HttpHeaders; import org.apache.http ...

  7. 正式开启全站HTTPS加密之旅

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 正式开启全站HTTPS加密之旅 日期:2017-7-14 ...

  8. 修改Git Commit提交记录的用户名Name和邮箱Email

    修改Git 本次Commit提交记录的用户名Name和邮箱Email git commit --amend --author="new-name <xxx@new.com>&qu ...

  9. Linux 环境编程:errno的基本用法

    背景 error是一个包含在<errno.h>中的预定义的外部int变量,用于表示最近一个函数调用是否产生了错误.若为0,则无错误,其它值均表示一类错误. errno只在函数返回错误时才有 ...

  10. OpenBMB × Hugging Face × THUNLP,联袂献上经典大模型课

    这个夏天,THUNLP 携手 Hugging Face 和 OpenBMB,推出 大模型公开课第二季.在大模型公开课第二季中,将有全球知名开源社区 OpenBMB X Hugging Face 梦幻联 ...