Выбор максимального значения в таблице postgresql, если максимальные значения не различимы - PullRequest
0 голосов
/ 22 марта 2020

У меня есть таблица coltures_report с полями application_id, coltures_id и row_step. Я хотел бы получить максимальное значение для row_step, сгруппированных по комбинации application_id и coltures_id. Однако row_step может иметь не уникальные значения, и я хотел бы получить все строки с максимальными значениями.

id  | application_id| coltures_id | row_step |
----+---------------+-------------+----------+
  1 |     1169      |      4      |    5     |
  2 |     1169      |      5      |    5     |
  3 |     1169      |      2      |    0     |
  4 |     1124      |      1      |    5     |
  5 |     1124      |      1      |    4     |
  6 |     1156      |      1      |    5     |
  7 |     1156      |      2      |    5     |
  8 |     1156      |      3      |    5     |

Ожидаемый результат

id  | application_id| coltures_id | row_step |
----+---------------+-------------+----------+
  1 |     1169      |      4      |    5     |
  2 |     1169      |      5      |    5     |
  3 |     1124      |      1      |    5     |
  4 |     1156      |      1      |    5     |
  5 |     1156      |      2      |    5     |
  6 |     1156      |      3      |    5     |

1 Ответ

0 голосов
/ 22 марта 2020

С NOT EXISTS:

select cr.* from coltures_report cr
where not exists (
  select 1 from coltures_report
  where application_id = cr.application_id and row_step > cr.row_step
)

или с rank() оконной функцией:

select cr.id, cr.application_id, cr.coltures_id, cr.row_step
from (
 select *, 
   rank() over (partition by application_id order by row_step desc) rn 
  from coltures_report
) cr
where cr.rn = 1

Или с коррелированным подзапросом:

select cr.* from coltures_report cr
where cr.row_step = (select max(row_step) from coltures_report where application_id = cr.application_id)

См. демо . Результаты:

> id | application_id | coltures_id | row_step
> -: | -------------: | ----------: | -------:
>  1 |           1169 |           4 |        5
>  2 |           1169 |           5 |        5
>  4 |           1124 |           1 |        5
>  6 |           1156 |           1 |        5
>  7 |           1156 |           2 |        5
>  8 |           1156 |           3 |        5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...