取出重复记录的第一条

简介: 这几天在查询购买记录,其中一个需求就是查出来客户首次购买的产品时间和产品名称。说白了,就是在一段时间内,去取出来用户的第一次购买记录,再清楚一些就是在一堆重复的记录中取出第一条购买记录。 这个问题捉只让我困扰了一段时间,自己最存储过程还是不能驾轻就熟,所以还是得按照传统的方法来进行查询了。

这几天在查询购买记录,其中一个需求就是查出来客户首次购买的产品时间和产品名称。说白了,就是在一段时间内,去取出来用户的第一次购买记录,再清楚一些就是在一堆重复的记录中取出第一条购买记录。

这个问题捉只让我困扰了一段时间,自己最存储过程还是不能驾轻就熟,所以还是得按照传统的方法来进行查询了。

要查询的记录如下:

而我们要取出来的记录如下:

事实上,这样的记录如果取出来第一条记录还是比较好取的,因为这里面有购买时间,我们可以根据购买时间,来取出首次购买的记录。同一个用户,购买的时间最早的,就是首次购买产品。

mysql> select account,itemid,buytime from testdup
    -> where buytime in (select min(buytime)
    -> from testdup group by account);

得到的结果如下

+-------------+----------+---------------------+
| account     | itemid   | buytime                    |
+-------------+----------+---------------------+
| zoinzone         | 2686977  | 2011-06-25 18:15:26 |
| llCoKell          | 65599    | 2011-06-14 00:44:36 |
| eventcso010   | 3735553  | 2011-06-23 15:34:33 |
| eventcso004   | 18939907 | 2011-06-24 18:33:35 |
+-------------+----------+---------------------+
4 rows in set (0.00 sec)

此外,还有的情况是,没有这样一个时间的标记项,让我们取出记录中每个重复记录的第一条,我们可以新建一列ID,自动累加,如下:

mysql> select * from testdup;
+----+-------------+----------+---------------------+
| id | account     | itemid   | buytime             |
+----+-------------+----------+---------------------+
|  1 | zoinzone    | 655361   | 2011-06-25 18:16:14 |
|  2 | zoinzone    | 2686977  | 2011-06-25 18:15:26 |
|  3 | llCoKell    | 6691703  | 2011-06-16 19:30:48 |
|  4 | llCoKell    | 65599    | 2011-06-14 00:44:36 |
|  5 | eventcso010 | 3735553  | 2011-06-23 15:34:33 |
|  6 | eventcso010 | 3735553  | 2011-06-26 17:24:25 |
|  7 | eventcso004 | 18939907 | 2011-06-24 18:33:35 |
+----+-------------+----------+---------------------+
7 rows in set (0.02 sec)

我们可以通过ID来取出我们想要的记录:

mysql> select * from testdup
    -> where id in (select min(id)
    -> from testdup group by account);
+----+-------------+----------+---------------------+
| id | account       | itemid    | buytime             |
+----+-------------+----------+---------------------+
|  1 | zoinzone      | 655361   | 2011-06-25 18:16:14 |
|  3 | llCoKell      | 6691703  | 2011-06-16 19:30:48 |
|  5 | eventcso010    | 3735553  | 2011-06-23 15:34:33 |
|  7 | eventcso004    | 18939907 | 2011-06-24 18:33:35 |
+----+-------------+----------+---------------------+
4 rows in set (0.00 sec)

相关文章
N..
|
JavaScript 前端开发
jQuery事件处理
jQuery事件处理
N..
159 1
|
前端开发 JavaScript
React17源码解读—— 事件系统
读完本篇文章你将明白为什么是React的合成事件SyntheticEvent, 以及React如何模拟浏览器的捕获和冒泡。   在学习React的合成事件之前,我们先复习下浏览器的事件系统,以及代理委托。这对我理解React事件系统源码非常重要。   W3C 标准约定了一个事件的传播过程要经过以下 3 个阶段:
React17源码解读—— 事件系统
|
安全 API 持续交付
阿里云云效产品使用问题之如何从流水线访问内网平台的HTTP接口
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
11月前
|
移动开发 前端开发 数据可视化
React 拖拽布局组件 Drag & Drop Layout
本文介绍了如何在React中构建拖拽布局组件,涵盖基础知识、常见问题及解决方案。首先解释了拖拽操作的三个阶段:开始、过程中和结束。接着推荐了几个常用的拖拽库,如`react-beautiful-dnd`,并详细展示了如何使用该库创建基础拖拽组件,包括安装依赖、初始化容器和处理拖拽结束事件。文章还探讨了常见问题,如拖拽不生效、性能优化、嵌套拖拽和跨浏览器兼容性,并提供了进阶技巧,如自定义样式、多列布局和集成其他UI组件。通过这些内容,读者可以掌握构建高效拖拽布局的方法。
759 16
|
监控 Linux 测试技术
LabVIEW网络服务器何使用,有哪些不同
LabVIEW网络服务器何使用,有哪些不同
220 1
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
161 1
|
大数据 数据挖掘 数据处理
Python数据流转的秘密武器:文件系统操作与高效I/O管理实战
【9月更文挑战第12天】在大数据时代,Python凭借其丰富的库和简洁的语法,成为数据处理的首选工具。本文通过实战案例,介绍如何利用Python的`pathlib`模块遍历复杂文件系统,以及通过高效I/O管理(如使用`with`语句和多线程)提升文本文件处理性能。通过这些技巧,你可以轻松从大量分散的文本文件中提取关键信息并整合成新的数据集,从而更好地支持数据分析工作。掌握这些技术,将助你在数据处理领域游刃有余。
74 4
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的校园服务平台管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的校园服务平台管理系统附带文章和源代码部署视频讲解等
144 4
基于ssm+vue.js+uniapp小程序的校园服务平台管理系统附带文章和源代码部署视频讲解等
|
SQL Java 关系型数据库
JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)
JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)
352 0
|
机器学习/深度学习 传感器 算法
【雷达通信】雷达探测项目仿真附Matlab代码
【雷达通信】雷达探测项目仿真附Matlab代码