所以我有一个充满数据的表,可能有一些重复的条目需要组合在一起,但我不知道如何处理这样做。
以下是数据样本:
+-------+---------------------+------------+--+
| 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),您会发现时间戳相差一秒。在我的数据中,这些时间戳可以相差几秒钟,但如果它们在连续的行中,我想将它们组合在一起。
他们通常成对出现,但我也见过三人一组。
将这些行分组在一起的最佳方法是什么?
提前致谢。
答案 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;