Удалить столбец RANK() из выходных данных

#sql #rank

Вопрос:

Я использую функцию RANK() в следующем скрипте для получения наблюдений за самой последней датой для каждого портфолио. Однако, хотя я очень доволен выводом, который предоставляет скрипт, мне было интересно, можно ли исключить столбец «ранг» в выводе.

 SELECT
 tbl.*
FROM
(SELECT 
 a.from_date fromdate, 
 a.portfolio,
 a.var1,
 a.var2,
 RANK() OVER (PARTITION BY a.portfolio ORDER BY a.from_date DESC) AS rank 
FROM 
 table1 a, 
INNER JOIN
 table2 b
ON
 a.portfolio_ref=b.por_ref
) tbl
WHERE
 tbl.rank = 1
 

Спасибо.

Комментарии:

1. Просто укажите нужные столбцы вместо tbl.* .

Ответ №1:

Очевидно, что вы можете выбрать нужные столбцы во внешнем запросе:

 select fromdate, portolio, var1, var2
from . . . 
 

Вы также можете использовать коррелированный подзапрос:

Одним из методов было бы использовать вместо этого коррелированный подзапрос:

 SELECT a.from_date as fromdate, a.portfolio,
       a.var1, a.var2
FROM table1 a INNER JOIN
     table2 b
     ON a.portfolio_ref = b.por_ref
WHERE a.from_date = (SELECT MAX(a2.from_date)
                     FROM table1 a2
                     WHERE a2.portfolio = a.portfolio
                    );