Как фильтровать строки по столбцам с максимальным значением? - PullRequest
1 голос
/ 28 июня 2019

У меня есть таблица, как показано ниже

--------Table 1----------
ID     VERSION     STATUS
001       1          1
001       1          2
002       1          3
002       2          4
002       2          3        

Так что здесь мне нужно отфильтровать идентификаторы на основе максимального значения версии и статуса.Ожидаемый результат ниже

--------Table 1----------
ID     VERSION     STATUS
001       1          2
002       2          4

Я пытался использовать код

select * 
from "table1" 
where "VERSION" = (select max("VERSION") from  "table1") 
  and "STATUS" = (select max("STATUS") from "table1")

Но он не работает.Пожалуйста, помогите

Ответы [ 5 ]

1 голос
/ 28 июня 2019
select id,max(version),max(status) from 
table1
group by id
1 голос
/ 28 июня 2019

Если я не пропустил что-то очевидное, простая группа с max должна сделать это:

SELECT ID, MAX(VERSION) As Version, MAX(STATUS) As Status
FROM table1
GROUP BY ID
0 голосов
/ 28 июня 2019

Попробуйте это:

select id,version,status from (
select *,ROW_NUMBER() over (partition by id order by status desc) rn from YOURTABLE
) t
where rn=1
0 голосов
/ 28 июня 2019

Вы можете использовать row_number():

select t.*
from (select t.*,
             row_number() over (partition by id order by version desc, status desc) as seqnum
      from t
     ) t
where seqnum = 1;
0 голосов
/ 28 июня 2019

большинство dbms поддерживают row_number (), вы можете попробовать, как показано ниже

   select * from 
    (select *,row_number() over(partition by id order by status desc) rn
    from table_name
    ) a where a.rn=1
...