2014-09-01 96 views
0

我有如下的SQL查詢。需要SQL SELECT查詢查找重複,並返回最小和最大行

(SELECT 
    height 
    ,width 
    ,ROUND(height/0.0254, 0) AS "H1" 
    ,FLOOR((width * 2)/0.0254) AS "W1" 
FROM iclr_max_dim_results mdim 
    ,iclr_request req 
WHERE mdim.request_oid = req.oid 
    AND req.request_number = 102017 
    AND req.version_number = 52731 
GROUP BY height 
ORDER BY height DESC 
       ) A 
    )  

以下是查詢結果。

height | width | H1 | W1 
----------------------------------------- 
<hr> 
6.0223 | 0.1003 | 237 | 7 
6.0198 | 0.2435 | 237 | 19 
6.0185 | 0.3151 | 237 | 24 
5.9944 | 1.6759 | 236 | 131 
5.9931 | 1.6779 | 236 | 132 
5.9576 | 1.7016 | 235 | 133 
5.9563 | 1.7024 | 235 | 134 

如果我們看到前三行中的最後兩列H1和W1,則值237分別以7,19,24重複。我只需要返回H1的最小和最大W1值。

在這裏,在這種情況下,結果應符合如下。我們消除了237 | 19,因爲7和24分別是最小值和最大值,分別爲237.

6.0223 | 0.1003 | 237 | 7 
6.0185 | 0.3151 | 237 | 24 
5.9944 | 1.6759 | 236 | 131 
5.9931 | 1.6779 | 236 | 132 
5.9576 | 1.7016 | 235 | 133 
5.9563 | 1.7024 | 235 | 134 

我應該如何編輯SQL qyery來實現這一點。

非常感謝。

回答

0

查詢可以這樣:

SELECT a.* 
    FROM (...) a 
    JOIN (
    SELECT H1, MIN(W1) as w1_min, MAX(W1) as w1_max 
    FROM (...) c 
    GROUP BY H1 
) b ON b.H1 = a.H1 AND (b.w1_min = a.W1 OR b.w1_max = a.W1) 

與原始查詢或cretate VIEW從代替原始查詢...和享有名稱替換(...)