2014-09-01 74 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从代替原始查询...和享有名称替换(...)