删除 SQL 选择中的重复项

Posted

技术标签:

【中文标题】删除 SQL 选择中的重复项【英文标题】:Remove Duplicates in a SQL Select 【发布时间】:2021-06-28 00:55:35 【问题描述】:

在 userid 和 contactid 之间有一个表联系人跟踪持续时间。

    想要总结 uid 和 cid 之间所有联系的持续时间。 每个联系人 A&B、B&A 始终有 2 行。

从跟踪中选择 *

uid cid dura
A B 5min
A B 1min
B A 5min
B A 1min
B C 2min
C B 2min

按uid从跟踪组中选择uid、cid、sum(dura)作为total,按total desc选择cid order

uid cid total
A B 6min
B A 6min
B C 2min
C B 2min

想要的结果是

uid cid total
A B 6min
B C 2min

由于 A&B 之间的联系方式与 B&A 相同,因此我只想选择 1 个结果 A&B。 如何使用选择或子查询,谢谢。

【问题讨论】:

用您正在使用的数据库标记您的问题。 【参考方案1】:

您似乎只是想过滤您的结果:

select uid, cid, sum(dura) as total
from tracking
where uid = 'A'
group by userid, contactid 
order by by total desc;

注意:标准 SQL 没有SORT BY 子句(尽管有些数据库确实支持这一点)。标准是ORDER BY

编辑:

对于已编辑的问题,您似乎想要:

select uid, cid, sum(dura) as total
from tracking
group by userid < contactid 
order by by total desc;

【讨论】:

抱歉,问题不够清楚,已编辑。 1.想要总结 uid 和 cid 之间所有联系的持续时间。 2. 每个联系人 A&B、B&A 总是有 2 行。由于 A&B 之间的联系方式与 B&A 相同,因此我只想选择 1 个结果 A&B。 @Tiketgcp 。 . .您看到修改后的查询了吗?

以上是关于删除 SQL 选择中的重复项的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:如何删除 listagg 中的重复项

从 SQLite 中的 SQL 查询结果中删除重复项

如何根据 SQL Server 中的某个列删除重复项? [复制]

如何在从多个表中获取多行的同时删除 sql JOIN 中的重复项

SQL SERVER 2005删除重复数据

怎么删除ACCESS中的重复记录 只保留一条