MySQL - 选择4个col中至少有1个不同的地方

时间:2013-12-04 21:20:05

标签: mysql

有人可以告诉我如何创建一个SQL查询,选择所有行中至少有4列中的1列与前面的行不同。我想要与GR​​OUP一样,然后影响多个列。当我使用时:

SELECT * FROM TABLE GROUP BY col1, col2, col3, col4 

我没有得到我想要的结果,因为列是彼此分组的

col1  col2  col3  col4 
1     2     2     4
1     2     2     3   <-- different -> select
1     2     3     2   <-- different -> select
1     2     3     2   <-- don't select
2     2     3     4   <-- different -> select

我不希望1 2 3 2列2次,并根据第5列确定哪一个首选

- 编辑 -

示例数据SQLfiddle:http://sqlfiddle.com/#!2/efd92e 在此示例中,我希望返回这些行

insert into tablename VALUES ("T", 12, 1000, 0, 500, 20.25); (4)*
insert into tablename VALUES ("H", 12, 150, 2500, 100, 45);  (0)*
insert into tablename VALUES ("H", 12, 100, 2500, 100, 45);  (2)*

*如果可能的话,我也想知道未选择的行数,因为它们是“重复的”。

我试图根据其中一个但没有成功来编写查询

- 澄清 -

  • 5个列的组合必须是唯一的。
  • 我需要具有最低col6的重复行。
  • 我想知道数据库中该行的重复数量

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

像这样的东西

SELECT * FROM TABLENAME WHERE ID NOT IN
 (SELECT t1.ID FROM tablename t1 JOIN tablename t2 ON t1.ID=t2.ID+1
 AND t1.col1=t2.col1  AND t1.col2=t2.col2 AND t1.col3=t2.col3
 AND t1.col4=t2.col4 AND t1.col5=t2.col5 AND t1.col6=t2.col6)

SQL Fiddle

假设自动增加ID。

说明:

加入表格本身,但行“更高”,所以它获取id,其中t1的行与t2中的“next”行相同。然后它选择表中的所有行,不包括那些行以前的操作。