我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql 取最早时间出现的数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql 取最早时间出现的数据

场景:有若干客户购买记录,统计出现的新客户(即客户第一次出现的时间)。
思路是根据名称分组,然后取分组中最早时间出现的数据。

话不多说,实验如下:

创建测试表

CREATE TABLE test_table(`id`  INT  UNSIGNED AUTO_INCREMENT,`create_time` DATE ,`name` VARCHAR(15) NOT NULL, PRIMARY KEY ( `id` )) ENGINE=INNODB DEFAULT CHARSET=utf8;

插入测试数据

INSERT INTO `test_table` (`id`, `create_time`, `name`) VALUES('1','2022-12-07','张三');INSERT INTO `test_table` (`id`, `create_time`, `name`) VALUES('2','2022-12-06','张三');INSERT INTO `test_table` (`id`, `create_time`, `name`) VALUES('3','2022-12-05','李四');INSERT INTO `test_table` (`id`, `create_time`, `name`) VALUES('4','2022-11-02','王五');INSERT INTO `test_table` (`id`, `create_time`, `name`) VALUES('5','2022-09-28','赵六');INSERT INTO `test_table` (`id`, `create_time`, `name`) VALUES('6','2022-08-02','赵六');

表数据如下:
表数据如图
可以看到,张三和赵六分别出现了两次,各自最早出现的时间应该取id=2和id=6的数据。预期结果应该是id为2、3、4、6的数据。

实现sql:

SELECT   a.id,   a.name,   a.create_time FROM   test_table AS a   INNER JOIN (    SELECT       SUBSTRING_INDEX(        GROUP_CONCAT(id ORDER BY create_time),         ',',         1      ) AS id     FROM       test_table     GROUP BY       `name`  ) b ON a.id = b.id;

查询结果如下,与预期相同:
查询结果

SQL分析

其中最主要的就是 GROUP_CONCAT() 函数将组中的字符串连接成为具有各种选项的单个字符串。
语法:

GROUP_CONCAT(DISTINCT expression    ORDER BY expression    SEPARATOR sep);

看下通过名称分组,根据时间排序后此函数效果

 SELECT GROUP_CONCAT(id ORDER BY create_time )AS group_id_text FROM test_table GROUP BY `name`;

函数效果

效果如上图,然后通过*SUBSTRING_INDEX()*函数取第一位,即是此名称最早出现的数据id。

 SELECT SUBSTRING_INDEX( GROUP_CONCAT( id ORDER BY create_time  ), ',', 1 ) AS id FROM test_table GROUP BY `name`;

取目标id
最后内关联查询完整数据:

SELECT   a.id,   a.name,   a.create_time FROM   test_table AS a   INNER JOIN (    SELECT       SUBSTRING_INDEX(        GROUP_CONCAT(id ORDER BY create_time),         ',',         1      ) AS id     FROM       test_table     GROUP BY       `name`  ) b ON a.id = b.id;

目标结果

结束

来源地址:https://blog.csdn.net/qq_39338799/article/details/128224365

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql 取最早时间出现的数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何获取 MySQL 数据库的最后访问(和/或写入)时间?

要获取上次访问时间,请尝试以下语法 -SELECT update_timeFROM INFORMATION_SCHEMA.TABLESWHERE table_schema = yourDatabaseNameAND table_nam
2023-10-22

Sql group by 分组取时间最新的一条数据

1.取时间最新的记录 不分组有重复(多条CreateTime一样的都是最新记录) select *from test twherepid in( select PId from Test t where time=(se
2023-08-16

MySQL获取binlog的开始时间和结束时间(最新方法)

这篇文章主要介绍了MySQL如何获取binlog的开始时间和结束时间,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-19

MySQL查询:Group By 后取出每一组中最大的数据

环境:MySQL5.7版本先生成一组测试数据public static int randAge(){ return new Random().nextInt(100);}public static char randScore(){ int i =

	MySQL查询:Group By 后取出每一组中最大的数据
2015-03-20

Mysql怎么获取指定时间范围的数据

要获取指定时间范围的数据,可以使用MySQL的WHERE子句和比较运算符来过滤结果。例如,假设有一个名为"orders"的表,其中包含一个名为"order_date"的日期列。要获取在2021年1月1日至2021年12月31日期间的订单数
Mysql怎么获取指定时间范围的数据
2024-04-09

获取数据表最后最后访问,修改,更新,扫描时间

数据分析,需要获取数据每一张表的最后访问,修改,更新,扫描时间等:  SELECT [Table Name] = [name],[Create Date] = create_date,[Modify Date] = modify_date,[Last User
获取数据表最后最后访问,修改,更新,扫描时间
2020-08-22

数据库Sql实现截取时间段和日期实例(SQL时间截取)

目录【写在前面】1、原始数据查看2、 sql实现日期和时间点分离(基于mysql)3、SQL语句及应用场景A、获取不同时间段的数据(%T和%H:%i:%s效果一样)B、获取日期,不包括时间点(%Y%m%d)C、获取是几几年的第几周(%X%V
2023-05-30

MYSQL双表查询时出现数据重复

今天在做双表查询的时候出现了同一条数据出现2次的问题(重复数据)。前景提要:  A表和B表   A表中有A.sourseId。B表中也有B.sourseId。                          A表中有A.accountsetId。B表中也有B
MYSQL双表查询时出现数据重复
2015-12-26

Mysql获取指定时间范围数据的各种实例

最近在做管理后台报表时,给定一个日期范围,查出库中这个日期范围内的每一天数据,下面这篇文章主要给大家介绍了关于Mysql获取指定时间范围数据的相关资料,需要的朋友可以参考下
2023-05-19

sql怎么查询最大时间的数据

要查询最大时间的数据,可以使用以下SQL语句:SELECT * FROM table_nameWHERE time_column = (SELECT MAX(time_column) FROM table_name);其中,table
sql怎么查询最大时间的数据
2024-04-09

mysql查询最近一小时的数据

date_sub()函数:DATE_SUB(date,INTERVAL expr type)  实例:SELECT NOW(),DATE_SUB(NOW(),INTERVAL 1 HOUR) as the_time select * from xxx wh
mysql查询最近一小时的数据
2015-02-12

编程热搜

目录