Я хочу запустить это либо в интерактивном режиме из psql, либо из кода.
create proc recent_orders_by_region
as
select top(3) * from view_orders where region = 'NA' order by order_date desc
select top(3) * from view_orders where region = 'WE' order by order_date desc
select top(3) * from view_orders where region = 'EE' order by order_date desc
Решение проблемы
Вы можете использовать rank() over ()
, но помните, что порядок должен быть уникальным, иначе RANK присвоит один и тот же номер нескольким строкам в группе.
Запрос с примерами данных
SELECT a.* FROM (
SELECT *,
rank() OVER (
PARTITION BY region
ORDER BY order_date DESC,ident DESC
)
FROM (
values
(1, current_date, 'NA'),(2, current_date-1, 'NA'),
(3, current_date-1, 'NA'),(4, current_date-4, 'NA'),
(5, current_date, 'NA1'),(6, current_date-1, 'NA1'),
(7, current_date-1, 'NA1'),(8, current_date-4, 'NA1')
) view_orders (ident, order_date, region)
) a WHERE RANK <=3
ident
предназначен только для демонстрационных целей и должен быть заменен реальным столбцом из view_orders
таблицы
Комментариев нет:
Отправить комментарий