消除连续行中的重复记录

时间:2016-05-07 14:54:30

标签: mysql sql group-by

所以我有一个充满数据的表,可能有一些重复的条目需要组合在一起,但我不知道如何处理这样做。

以下是数据样本:

+-------+---------------------+------------+--+
| id    | timestamp           | customerID |  |
+-------+---------------------+------------+--+
| 15711 | 2016-05-07 00:46:11 | 11191      |  |
| 15710 | 2016-05-07 00:46:11 | 11191      |  |
| 15709 | 2016-05-07 00:46:05 | 10076      |  |
| 15708 | 2016-05-07 00:46:04 | 10076      |  |
| 15707 | 2016-05-07 00:23:57 | 11192      |  |
| 15706 | 2016-05-07 00:13:59 | 11189      |  |
| 15705 | 2016-05-07 00:05:27 | 11188      |  |
+-------+---------------------+------------+--+

如果查看前两行(ID 15711和15710),它们具有完全相同的时间戳,因此您认为我可以按时间戳分组。但是,如果查看接下来的两行(15709和15708),您会发现时间戳相差一秒。在我的数据中,这些时间戳可以相差几秒钟,但如果它们在连续的行中,我想将它们组合在一起。

他们通常成对出现,但我也见过三人一组。

将这些行分组在一起的最佳方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果你想识别"剧集"对于单个客户,您可以这样做:

select customerId, count(*) as numrows,
       min(id), max(id), min(timestamp), max(timestamp)
from (select t.*,
             (@grp := if(@c = customerId, @grp,
                         if(@c := customerId, @grp + 1, @grp + 1)
                        )
             ) as grp
      from t cross join
           (select @c := '', @grp:= 0) params
      order by id
     ) t
group by customer, grp;