2015-08-06 5 views
0

Скажем, у меня есть таблица t1:MAX (колонка), когда столбец Повторяющиеся

c1 | c2 | c3| c4 
1 1 1 A 
1 1 2 B 
1 1 3 C 
1 1 4 D 
1 1 4 E 
1 1 4 F 
2 2 1 A 
2 2 2 A 
2 2 3 A 

Я хочу, чтобы выбрать строку для каждого c1, c2 пар, которая имеет максимальную c3. Вопрос в том, какая строка будет выбрана, если бы я сделал max (c3) для каждого c1, c2, а затем снова присоединился к исходной таблице? Будет ли он просто выбрать одну из трех строк, где c3 = 4 в случайном порядке?

+1

Если вы 'JOINED' назад к исходной таблице по этому значению, было бы выбрать все из них. – Siyual

+2

Какая у вас база данных? – Mihai

+1

Нет, он выберет все из них. –

ответ

0

Вы, наверное, не нужно объединение:

select c1,c2,c3,maxc3 from (
    SELECT c1,c2, c3,MAX(c3) OVER() as maxc3 
    FROM @temp 
    GROUP BY c1,c2,c3 
    ) a 
    where c3 = maxc3 
0

Все зависит от объединения условие - если вы получаете MAX(c3) и JOIN НАЗАД результат:

  • Если вы присоединяетесь по столбцам c1 и c2 у вас будут все 3 строки.
  • Если вы добавите отличную верхнюю предыдущую комбинацию, у вас будет только 1 строка.
  • Если вы присоединились к колонкам c1, c2 и c3 - у вас будет 1 ряд.
0

, какая строка будет выбрана, если я сделал макс (с3) для каждого c1, c2, то самостоятельно присоединился обратно к исходной таблице?

=> Ответ на это в том, что все строки, которые соответствуют обратно на max(c3) значения будут выбраны.

Может ли он выбрать один из трех рядов, где c3 = 4 в случайном порядке?

=> Нет, то же, что и выше. Любое совпадение max(c3) с графом c3 в вашей таблице объединения будет возвращено (, например, ваше c1 и c2 значение 1 вернет 3 строки, так как оно имеет максимальное значение 4 в трех строках). Чтобы ограничить самостоятельное присоединение на c3, вам может понадобиться присоединиться к колонкам c1 и c2.

select t1.* 
from table1 t1 
join 
(
select 
     c1, 
     c2, 
     max(c3) as c3 
from table1 
group by c1,c2 
) t on t.c1 = t1.c1 
    and t.c2 = t1.c2 
    and t.c3 = t1.c3 
order by t.c1,t.c2 

SQL Fiddle Demo

Смежные вопросы