mysql根据两列去重复_mysql – 从不同的相关记录组中的两列之一中选择包含重复值的所有行...

我正在尝试创建一个

MySQL查询,该查询将返回包含一组相关记录中的重复值的所有单独行(未分组). “相关记录组”是指具有相同帐号的组(根据下面的示例).

基本上,在共享相同的不同帐号的每组相关记录中,只选择那些日期或金额列的值与该帐户的记录组中的另一行值相同的行.只应将该值视为该帐户组内的重复值.下面的样本表和理想的输出细节应该可以解决问题.

此外,即使它们具有重复值,我也不关心任何返回X状态的记录.

带有相关数据的小样本表:

id account invoice date amount status

1 1 1 2012-04-01 0 X

2 1 2 2012-04-01 120 P

3 1 2 2012-05-01 120 U

4 1 3 2012-05-01 117 U

5 2 4 2012-04-01 82 X

6 2 4 2012-05-01 82 U

7 2 5 2012-03-01 81 P

8 2 6 2012-05-01 80 U

9 3 7 2012-03-01 80 P

10 3 8 2012-04-01 79 U

11 3 9 2012-04-01 78 U

从所需的SQL查询返回的理想输出:

id account invoice date amount status

2 1 2 2012-04-01 120 P

3 1 2 2012-05-01 120 U

4 1 3 2012-05-01 117 U

6 2 4 2012-05-01 82 U

8 2 6 2012-05-01 80 U

10 3 8 2012-04-01 79 U

11 3 9 2012-04-01 78 U

因此,第7/9行和第8/9行不应同时返回,因为它们的重复值在各自的帐户范围内不被视为重复.但是,应返回第8行,因为它与第6行共享一个重复值.

稍后,我可能希望通过仅抓取具有匹配状态的重复行来进一步磨练选择,因此排除第2行,因为它与该帐户的记录组中找到的其他两个不匹配.进行查询会有多困难?它只是添加WHERE或HAVING子句的问题,还是比它更复杂?

我希望我对我想要完成的事情的解释是有道理的.我尝试过使用INNER JOIN但是多次返回每个所需的行.我不想要重复的重复.

表结构和示例值:

CREATE TABLE payment (

id int(11) NOT NULL auto_increment,

account int(10) NOT NULL default '0',

invoice int(10) NOT NULL default '0',

date date NOT NULL default '0000-00-00',

amount int(10) NOT NULL default '0',

status char(1) NOT NULL default '',

PRIMARY KEY (id)

);

INSERT INTO payment VALUES (1, 1, 1, '2012-04-01', 0, 'X');

INSERT INTO payment VALUES (2, 1, 2, '2012-04-01', 120, 'P');

INSERT INTO payment VALUES (3, 1, 2, '2012-05-01', 120, 'U');

INSERT INTO payment VALUES (4, 1, 3, '2012-05-01', 117, 'U');

INSERT INTO payment VALUES (5, 2, 4, '2012-04-01', 82, 'X');

INSERT INTO payment VALUES (6, 2, 4, '2012-05-01', 82, 'U');

INSERT INTO payment VALUES (7, 2, 5, '2012-03-01', 81, 'p');

INSERT INTO payment VALUES (8, 2, 6, '2012-05-01', 80, 'U');

INSERT INTO payment VALUES (9, 3, 7, '2012-03-01', 80, 'U');

INSERT INTO payment VALUES (10, 3, 8, '2012-04-01', 79, 'U');

INSERT INTO payment VALUES (11, 3, 9, '2012-04-01', 78, 'U');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值