取出重复记录的第一条

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

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

要查询的记录如下:

取出重复记录的第一条

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

取出重复记录的第一条

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

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)

上一篇:Excel两列比较


下一篇:[WEB安全]MSSQL/SQL Server 提权手法详解(中)