Как выбрать строки, в которых конкретный столбец имеет наибольшее значение, а другой столбец имеет определенное значение - PullRequest
1 голос
/ 16 октября 2019

Я ищу, чтобы выбрать следующие строки из таблицы, где соблюдаются следующие ограничения:

Я связывался с соединениями сам по себе (выбирая максимальную версию этого, если idb = x в подзапросе), ноне повезло

Например:

idb = x, если va определенного ida является максимальным va для этого ida, а idb равно x, затем включите его

ida     |    idb     |     va
--------------------------------
abc          x             1
abc          y             2
abc          x             3
def          x             1
xyz          x             1
xyz          x             2
xyz          z             3

Результат:

ida     |    idb     |     va
--------------------------------
abc          x             3
def          x             1

Для предыдущего примера,

abc включен, поскольку самая высокая версия va (3) находится в строке, где idb = x

def включен, потому что самая высокая версия va (1) находится в строке, где idb = x

xyz НЕ включена, потому что самая высокая версия xyz (va = 3) имеет значение idb = z

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

Если я правильно понимаю, вам нужны строки, в которых максимальная версия для данного ida имеет значение idb 'x'.

Если это так:

select t.*
from (select t.*,
             max(version) over (partition by ida) as max_version
      from t
     ) t
where version = max_version and idb = 'x';
0 голосов
/ 16 октября 2019

Самый простой код будет:

select t.ida, t.idb, t.va
  from your_table t
 where t.idb = 'x'
   and t.va = (select max(sub_qry.va) 
                 from your_table sub_qry
                where sub_qry.ida = t.ida)
...