两列中的最小值(Oracle SQL)

两列中的最小值(Oracle SQL),sql,oracle,Sql,Oracle,搜索了一段时间,但没有找到适合我问题的答案 说明: ID | Year | Factor1 | Number1 | Number2 1 | 2010 | 213 | 1 | 1 2 | 2010 | 213 | 1 | 2 3 | 2010 | 214 | 2 | 1 4 | 2010 | 214 | 2 | 2 6 | 2010 |

搜索了一段时间,但没有找到适合我问题的答案

说明:

ID | Year | Factor1 | Number1 | Number2 1 | 2010 | 213 | 1 | 1 2 | 2010 | 213 | 1 | 2 3 | 2010 | 214 | 2 | 1 4 | 2010 | 214 | 2 | 2 6 | 2010 | 210 | 3 | 1 7 | 2010 | 210 | 3 | 2 8 | 2011 | 250 | 3 | 5 5 | 2012 | 214 | 2 | 4 编辑: 忘了什么,在上表中更正了。 我需要2个组合:年份和系数1只需要一次,然后是minnumber1和最后一个minnumber2。 例如,上面我需要ID 1,3,5,6,8,抱歉它们是混合的,以便其他值具有更好的可读性

有人知道如何实现这一点吗

SELECT id , year, number1, number2 
FROM @table A
WHERE number1 IN (SELECT MIN(number1) FROM @table WHERE year = A.year)
OR number2 IN (SELECT MIN(number2) FROM @table WHERE year = A.year)
你的桌子在哪里


@table是你的桌子在哪里

好的,像这样吗

delete from mb_test
where ID not in
   ( select id
     from mb_test mbt
         ,(select year, min(number1) as min1, min(number2) as min2
           from mb_test
           group by year) mb_mins
     where mbt.year = mb_mins.year
     and   (mbt.number1 = mb_mins.min1 OR mbt.number2 = mb_mins.min2)
   )

好吧,像这样的事情

delete from mb_test
where ID not in
   ( select id
     from mb_test mbt
         ,(select year, min(number1) as min1, min(number2) as min2
           from mb_test
           group by year) mb_mins
     where mbt.year = mb_mins.year
     and   (mbt.number1 = mb_mins.min1 OR mbt.number2 = mb_mins.min2)
   )

现在从另一个论坛获得代码,对我来说很好:

SELECT tab.* FROM t33 tab INNER JOIN ( SELECT m1.y, m1.factor1, m1.min_1, m2.min_2 FROM ( SELECT y, factor1, MIN(number1) AS min_1 FROM t33 tab GROUP BY y, factor1 ) m1 INNER JOIN ( SELECT y, factor1, number1, MIN(number2) AS min_2 FROM t33 GROUP BY y, factor1, number1 ) m2 ON m1.y = m2.y AND m1.factor1 = m2.factor1 AND m1.min_1 = m2.number1 ) sel ON tab.y = sel.y AND tab.factor1 = sel.factor1 AND tab.number1 = sel.min_1 AND tab.number2 = sel.min_2
现在从另一个论坛获得代码,对我来说很好:

SELECT tab.* FROM t33 tab INNER JOIN ( SELECT m1.y, m1.factor1, m1.min_1, m2.min_2 FROM ( SELECT y, factor1, MIN(number1) AS min_1 FROM t33 tab GROUP BY y, factor1 ) m1 INNER JOIN ( SELECT y, factor1, number1, MIN(number2) AS min_2 FROM t33 GROUP BY y, factor1, number1 ) m2 ON m1.y = m2.y AND m1.factor1 = m2.factor1 AND m1.min_1 = m2.number1 ) sel ON tab.y = sel.y AND tab.factor1 = sel.factor1 AND tab.number1 = sel.min_1 AND tab.number2 = sel.min_2
结果是1,2,3,5,6,8,因为2包含Number1=1,这是2010年的MINNumber1查询很好,但是您可以删除这些括号吗?在oracle中,您没有类似的内容。OP希望删除记录,因此正确的答案将是带有WHERE子句的DELETE语句,该子句与您发布的语句逻辑相反。而且,这看起来像SQL Server语法。否则就是一个好答案!结果是1,2,3,5,6,8,因为2包含Number1=1,这是2010年的MINNumber1查询很好,但是您可以删除这些括号吗?在oracle中,您没有类似的内容。OP希望删除记录,因此正确的答案将是带有WHERE子句的DELETE语句,该子句与您发布的语句逻辑相反。而且,这看起来像SQL Server语法。否则就是一个好答案!为什么要保留记录3和记录6而放弃记录2?要在一年内删除除minNumber1和minnumber2之外的任何记录。。表格中指定的示例id 2的最小值为1,id 8的最小值为1和2,所以为什么要删除它们…如果您给出更好的解释,这可以解决。。。。希望我没有进一步把你弄糊涂……你所说的但仅仅是两者的结合是什么意思?我需要数字1和数字2的年最小结合;对,上面表格中的ID是1,5,8,这是一个输入错误;是我的错:-/纠正了原问题中的错误@Florin我的意思是,我需要一年中最低的数字1和数字2组合。我想,由于标题,许多用户会来这里寻找函数。为什么要保留记录3和6,但放弃记录2?你想在一年内删除除minNumber1和minnumber2之外的任何记录。。表格中指定的示例id 2的最小值为1,id 8的最小值为1和2,所以为什么要删除它们…如果您给出更好的解释,这可以解决。。。。希望我没有进一步把你弄糊涂……你所说的但仅仅是两者的结合是什么意思?我需要数字1和数字2的年最小结合;对,上面表格中的ID是1,5,8,这是一个输入错误;是我的错:-/纠正了原问题中的错误@Florin我的意思是我需要一年中最低的数字1和数字2组合。我想,由于标题,许多用户会来这里寻找功能。