2012-03-29 9 views
0

Ищите какое-то время, но не нашли подходящего ответа на мою проблему.минимальное значение из двух столбцов (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  

EDIT: Забыли что-то, исправленное, что в приведенной выше таблице. Мне нужно 2 комбинации: год и коэффициент1 только один раз, затем мин (число 1) и последний мин (число 2). Например, выше, мне нужны идентификаторы 1,3,5,6,8 (извините, что они смешаны для лучшей удобочитаемости других значений).

Кто-нибудь знает, как это реализовать?

+1

Почему вы хотите сохранить записи 3 и 6, но отбрасывать запись 2? – APC

+0

вы хотите удалить «любой, кроме min (Number1) и min (number2) в год». Form из указанного примера id 2 имеет мин. Номер 1 = 1, а id 8 номер 1 и 2 не являются минимальными, поэтому почему вы удаляете их ... если вы дадите лучшее объяснение, это может быть уловлено .... надеюсь, что я больше не смутил вас .... –

+0

Что вы подразумеваете под словом «но только комбинация обоих»? –

ответ

1

получил код теперь от другого форума, отлично работает для меня:

 
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
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 ваша таблица

+0

результат 1,2,3,5,6,8, потому что 2 содержит Number1 = 1, который является MIN (Number1) за 2010 год – Zyku

+0

Запрос хороший, но можете ли вы удалить эти скобки? В оракуле у вас нет ничего подобного. –

+0

sigur, no problem – Zyku

0

ОК, так что-то вроде этого?

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) 
    ) 
Смежные вопросы