#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
);