2016-08-24 3 views
1

Я хочу представить последнюю версию таблицы с обоими значениями на другую.Максимальная версия с обоими значениями другой колонки

Version | Value 
12  | ORANGE 
11  | ORANGE 
11  | BANANA 
10  | ORANGE 
11  | BANANA 

Результат должен быть

11  | ORANGE 
11  | BANANA 

Может кто-нибудь мне помочь?

+2

Есть ли какая-либо логика для получения этого результата? – dnoeth

+0

Мне нужен выбор, который показывает обе строки с максимальной версией и обоими значениями. –

+0

Но почему Оранжевый - 11, а не 12? –

ответ

0

Это должно работает

SELECT * 
FROM TABLE 
WHERE VERSION IN (
    SELECT MIN(VERSION) -- GET MIN VERSION FROM MAX 
    FROM (
     SELECT MAX(VERSION) as VERSION, 
     FROM TABLE 
     GROUP BY VALUE) 
    ) 
) 

Это возвращение трюка вы мин версии от Max версии, это работает только тогда, когда оба банан и апельсиновой доля числа точной версии. Это означает, что если Orange пропускает версию (от 11 до 13 с 12), а банана - ровно 12, это не сработает.

+0

Это работает, спасибо –

+0

Он также потерпит неудачу, если вы добавите новую строку '13 | BANANA' – dnoeth

+0

Согласитесь, может быть, мы могли бы использовать @dnoeth ответ как правильно, потому что его сценарий найдет точную нижнюю версию, общую с бананом и оранжевым. Мы могли бы также изменить предложение Have с новым запросом на отдельный элемент значения вместо двух –

0

Это должно соответствовать Вашему описанию:

SELECT * FROM tab 
WHERE Version IN 
(
    SELECT MAX(Version) OVER() 
    FROM tab 
    -- WHERE Value in ('ORANGE','BANANA') ??? 
    GROUP BY Version 
    -- HAVING COUNT(DISTINCT Value) -- if duplicates exist 
    HAVING COUNT(*) = 2 -- only versions with two entries 
)