минимальное значение из двух столбцов (Oracle SQL) - PullRequest
0 голосов
/ 29 марта 2012

Пока что ищу, но не нашел подходящего ответа на мою проблему.

Объяснение:

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 только один раз, затем мин (номер1) и последний мин (номер2).Например, выше, мне понадобятся идентификаторы 1,3,5,6,8 (извините, они смешаны для лучшей читаемости других значений).

Ответы [ 3 ]

2 голосов
/ 29 марта 2012
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 - ваш стол

1 голос
/ 04 апреля 2012

Получил код сейчас с другого форума, у меня отлично работает:

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
0 голосов
/ 29 марта 2012

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

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)
   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...