Выберите группу с максимальным предикатом - PullRequest
0 голосов
/ 08 октября 2019

Довольно часто мне приходится выполнять запросы, как показано ниже:

select    col1, max(id)
from      Table
where     col2 = 'value'
and       col3 = (    select    max(col3)
                      from      Table
                      where     col2 = 'value'
                 )
group by col1

Есть ли другие способы избежать подзапросов и временных таблиц? В основном мне нужно group by на всех строках с определенным максимальным значением. Предполагая, что используются все правильные индексы.

1 Ответ

1 голос
/ 08 октября 2019

Вы можете использовать функцию OLAP для достижения этой цели. Я бы сказал, что это решение несколько лучше, поскольку ваши предикаты не дублируются между основным запросом и подзапросом, поэтому вы не нарушаете DRY :

SELECT *
FROM (
    select    col1, max(id) as max_id,
              RANK() OVER (PARTITION BY col1 ORDER BY col3 DESC) AS irow
    from      [Member]
    where     col2 = 'value'
    group by  col1
) subquery
WHERE subquery.irow = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...