需要SQL select查询来查找重复项并返回最小和最大行数

时间:2014-09-01 07:12:06

标签: sql select

我有如下的SQL查询。

(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 |因为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以实现此目的。

非常感谢。

1 个答案:

答案 0 :(得分: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)

...替换为您原始查询的原始查询或折痕VIEW,并将(...)替换为视图名称。