我有一个活动表,其中包含各种活动和哈希值(actorEntity|subjectEntity|activity-type)
在某些情况下,用户可能会在几秒钟内执行完全相同的活动两次,这意味着数据库中会有两个相邻的行具有完全相同的数据。
对于某些用例,我们不想显示重复的活动,因此我们现在根据哈希过滤掉应用程序中的重复项。唯一的问题是,这些活动在某些情况下也会进行分页,这意味着从应用程序的结果集中提取记录会与分页发生冲突。
我正在寻找一种在 SQL 中执行此操作的方法,以便可以在数据库级别完成分页。
给定数据:
id | message | from | hash
-------------------------------------
1 | hello | bryan | b-hello
2 | goodbye | bryan | b-goodbye
3 | goodbye | john | j-goodbye
4 | goodbye | john | j-goodbye
5 | hello | john | j-hello
6 | goodbye | john | j-goodbye
我想检索以下结果集:
id | message | from | hash
-------------------------------------
1 | hello | bryan | b-hello
2 | goodbye | bryan | b-goodbye
4 | goodbye | john | j-goodbye
5 | hello | john | j-hello
6 | goodbye | john | j-goodbye
请注意,虽然第 3 行和第 4 行相同,但只有一行位于所需结果集中,因为它们是相邻的。即使第 6 行是相同的哈希,它也应该包含在结果中,因为它与另一个相同的哈希不相邻。
我不关心结果中返回哪些相邻行,因为它们是相同的。
我正在使用 MySql 5.5。
看一下这个: *SQLFIDDLE http://sqlfiddle.com/#!2/ce86b/1我有点怀疑,好像这对于你的要求来说太简单了。所以请评论。我向样本数据添加了更多重复记录。以下查询删除最新的重复项,保留第一个条目。
样本数据:
ID MESSAGE FROMA HASHA
1 hello bryan b-hello
2 goodbye bryan b-goodbye
3 goodbye john j-goodbye
4 goodbye john j-goodbye
5 goodbye john j-goodbye
6 hello john j-hello
7 goodbye bryan b-goodbye
8 goodbye bryan b-goodbye
查询查找相同记录(最新的一条或多条):
select* from actors a
join actors b
where b.id + 1 = a.id
and b.hasha = a.hasha
;
Result:
ID MESSAGE FROMA HASHA
4 goodbye john j-goodbye
5 goodbye john j-goodbye
8 goodbye bryan b-goodbye
查询以获取唯一记录:
select * from actors a
where a.id not in (
select a.id from actors a
join actors b
where b.id + 1 = a.id
and b.hasha = a.hasha
);
Results:
ID MESSAGE FROMA HASHA
1 hello bryan b-hello
2 goodbye bryan b-goodbye
3 goodbye john j-goodbye
6 hello john j-hello
7 goodbye bryan b-goodbye
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)