想要删除单个表中的部分匹配行

时间:2017-02-02 07:42:53

标签: sql database oracle

这是由以下条目组成的表

MODEL   VALVE_SIZE  D
PT21-15   2.5      150
PT21-15   2.8      180
PT21-15   3.2      240
PT21-20   2.8      215
PT21-20   3.2      250

我想获取值为d的行在150-250之间,并且不应重复模型名称。 我正在使用(选择型号,来自dis的valve_size,其中d> = 150且d <250)但我希望输出为无行,应该使用相同的型号名称重复。

预期产出

MODEL   VALVE_SIZE  D
PT21-15   2.5      150
PT21-20   2.8      215

2 个答案:

答案 0 :(得分:0)

您的示例数据和输出意味着您希望每个模型具有最小 d值(或可能valve_size值)的单条记录。在这种情况下,您可以尝试以下查询:

WITH cte AS (
    SELECT model, valve_size, d,
           ROW_NUMBER() OVER (PARTITION BY model ORDER BY d) rn
    FROM dis
    WHERE d >= 150 AND d < 250
)

SELECT t.model,
       t.valve_size,
       t.d
FROM cte t
WHERE t.rn = 1

答案 1 :(得分:0)

尝试以下脚本,

SELECT  MODEL,
        MIN(VALVE_SIZE) AS VALVE_SIZE,
        MIN(D)          AS  D
FROM    TABLE1
WHERE   D >= 150 AND d < 250
GROUP BY MODEL