Как выбрать несколько столбцов с одним столбцом max() из нескольких таблиц
select max(some_column1), some_column2 from(
select distinct some_column1, some_column2 from table1 where some_column1 = (select max(some_column1) from table1)
union all
select distinct some_column1, some_column2 from table2 where some_column1 = (select max(some_column1) from table2)
union all
select distinct some_column1, some_column2 from table3 where some_column1 = (select max(some_column1) from table3)
) as max_result
Этот запрос делает именно то, что я хочу. Единственная проблема - когда я получаю максимальный результат из some_column1, я также хочу получить some_column2, который соответствует max(some_column1). Вместо этого я получаю 3 результата. Мне нужно ограничить это одним результатом. some_column2 должен быть из той же таблицы, что и max(some_column1). Есть ли способ сделать это помимо сохранения результата во временную таблицу? Вся помощь приветствуется. Заранее спасибо!
2 ответа
Я думаю, что самый простой способ - это отсортировать по some_column1 и взять первый ряд. Это получит строку, где some_column1 имеет большее значение и все еще имеет доступ к some_column2.
Пытаться:
select top 1 some_column1, some_column2 from(
select distinct some_column1, some_column2 from @table1 where some_column1 = (select max(some_column1) from @table1)
union all
select distinct some_column1, some_column2 from @table2 where some_column1 = (select max(some_column1) from @table2)
union all
select distinct some_column1, some_column2 from @table3 where some_column1 = (select max(some_column1) from @table3)
) as max_result
order by some_column1 desc
Дайте этому шанс... Это немного запутанно... но должно сработать.. Если в максимальных значениях есть связь, и вы хотите всего этого, тогда просто замените =
отметьте, где пункт с IN
select max_result.some_column1,max_result.some_column2 from (
select distinct some_column1, some_column2 from table1 where some_column1 = (select max(some_column1) from table1)
union all
select distinct some_column1, some_column2 from table2 where some_column1 = (select max(some_column1) from table2)
union all
select distinct some_column1, some_column2 from table3 where some_column1 = (select max(some_column1) from table3)
) max_result
where max_result.some_column1 =
(select max(some_column1) from
(
select distinct some_column1, some_column2 from table1 where some_column1 = (select max(some_column1) from table1)
union all
select distinct some_column1, some_column2 from table2 where some_column1 = (select max(some_column1) from table2)
union all
select distinct some_column1, some_column2 from table3 where some_column1 = (select max(some_column1) from table3)
))