2017-01-23 39 views
0

我有一个SQL表基于值滤波器重复行:SQL在不同的列

+-------------+-----------+---------+ 
|  ID  | position | user | 
+-------------+-----------+---------+ 
|  1  |  1  |  0 | 
|  2  |  2  |  0 | 
|  3  |  3  |  0 | 
|  4  |  4  |  0 | 
|  5  |  5  |  0 | 
|  6  |  6  |  0 | 
|  7  |  7  |  0 | 
|  8  |  7  |  1 | 
+-------------+-----------+---------+ 

我想基于位置栏和用户列的不同值来过滤重复的行,用于第一个查询我需要有以下结果:

+-------------+-----------+---------+ 
|  ID  | position | user | 
+-------------+-----------+---------+ 
|  1  |  1  |  0 | 
|  2  |  2  |  0 | 
|  3  |  3  |  0 | 
|  4  |  4  |  0 | 
|  5  |  5  |  0 | 
|  6  |  6  |  0 | 
|  8  |  7  |  1 | 
+-------------+-----------+---------+ 

对于第二个查询我需要以下条件:

+-------------+-----------+---------+ 
|  ID  | position | user | 
+-------------+-----------+---------+ 
|  1  |  1  |  0 | 
|  2  |  2  |  0 | 
|  3  |  3  |  0 | 
|  4  |  4  |  0 | 
|  5  |  5  |  0 | 
|  6  |  6  |  0 | 
|  7  |  7  |  0 | 
+-------------+-----------+---------+ 

我需要什么查询来实现这个目标?

感谢。

+0

如果它采取了另一个值(例如如图2所示)?在这种情况下你需要什么? – Zeina

回答

1

在没有进一步信息的情况下,下面的两个查询假定您想要通过在第二种情况下采用较大(最大)user值或第二种情况下较小(最小)user值来解决重复位置案件。

首先查询:

SELECT t1.* 
FROM yourTable t1 
INNER JOIN 
(
    SELECT position, MAX(user) AS max_user 
    FROM yourTable 
    GROUP BY position 
) t2 
    ON t1.position = t2.position AND 
     t1.user  = t2.max_user 

第二个查询:

SELECT t1.* 
FROM yourTable t1 
INNER JOIN 
(
    SELECT position, MIN(user) AS min_user 
    FROM yourTable 
    GROUP BY position 
) t2 
    ON t1.position = t2.position AND 
     t1.user  = t2.min_user 
+0

谢谢,这正是我所期待的。 –