mysql 查询重复记录 取第一条_取出重复记录的第一条

本文介绍了如何在MySQL中查询重复记录并提取第一条。通过使用子查询配合MIN函数,可以依据购买时间或自增ID找出每个用户或记录组的首次出现记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

要查询的记录如下:

b440786e454453fdcdbe82f46370d267.png

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

44b8f7509996896aa393ed2eda658037.png

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

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值