如果该行具有超过 1 个相同的值/重复,则从选择中排除行
Posted
技术标签:
【中文标题】如果该行具有超过 1 个相同的值/重复,则从选择中排除行【英文标题】:Exclude rows from select if that row having more than 1 same value / duplicate 【发布时间】:2020-07-12 17:50:06 【问题描述】:如果该行有重复,如何只选择没有行
ID | Amount | Status | FK
---+--------+--------+---
1 | -1000 | T | 10
2 | -1500 | T | 11
3 | -100 | T | 12
4 | -200 | T | 13
5 | -300 | T | 14
6 | 300 | R | 14
状态说明:T = Transaction,R = Refund
我怎样才能获取 id 为 1、2、3、4 的数据并排除 5 和 6?
【问题讨论】:
mysql 还是 SQL Server?它们是两种不同的产品,除非您想要两者的解决方案,否则请仅标记您正在使用的产品。也期望您向我们展示您的尝试。 【参考方案1】:另一种选择是将 WITH TIES 与窗口函数配合使用
示例
Select top 1 with ties *
From YourTable
Order By sum(1) over (partition by FK)
退货
ID Amount Status FK
1 -1000 T 10
2 -1500 T 11
3 -100 T 12
4 -200 T 13
【讨论】:
这很有帮助,谢谢,但我能问你问题吗,WITH TIES 比“select * from table_name where fk not in (select fk from table_name group by fk with count(1) > 1);"正如@Jim Maculay 提到的那样?谢谢 @aldesrahim 总是乐于提供帮助 @aldesrahim 窗口函数往往相当高效。也就是说,只有在您的系统上进行实际测试才能证明最佳方法是什么。【参考方案2】:请使用以下查询,
select * from table_name
where fk not in
(select fk from table_name group by fk having count(1) > 1);
【讨论】:
以上是关于如果该行具有超过 1 个相同的值/重复,则从选择中排除行的主要内容,如果未能解决你的问题,请参考以下文章
如果有重复的 Ticker 并且超过一个月的时差,则从数据框中提取 Ticker 名称