[英]min value from two columns (Oracle SQL)
現在搜索了一段時間,但沒有找到適合我的問題的答案。
說明:
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個組合:year和factor1僅一次,然后是min(number1)和最后一個min(number2)。 例如,在上面我需要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是您的表
現在從另一個論壇獲得了代碼,對我來說效果很好:
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
好,這樣的事嗎?
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)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.