2017-01-23 40 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

謝謝,這正是我所期待的。 –