Как можно максимально оптимизировать запрос?
У меня есть следующий код:
- Он группирует юзеров по
user_id, role_id, date_trunc('day', update)
- Из каждой группы берет последнию запись по
update
- Далее эти последние записи дополнительно группирует по
user_id, role_id, currency
и берет так же последнюю запись из группы поupdate
- Далее эти записи финально группирует по
currency
и суммирует полеamount
Как можно максимально оптимизировать этот запрос т.к. в данный момент на большой выборке он выполняется долго ?
WITH rankedUsers AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY user_id, role_id, date_trunc('day', update) ORDER BY update DESC) AS rank
FROM users
WHERE
AND update < '2024-02-01 00:00:00'
),
lastRankedUsers AS (
SELECT *
FROM rankedUsers
WHERE rank = 1
),
filteredUsers AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY user_id, role_id, currency ORDER BY update DESC) AS filteredRank
FROM lastRankedUsers
),
lastFilteredUsers AS (
SELECT *
FROM filteredUsers
WHERE filteredRank = 1
)
SELECT
currency,
SUM(amount) AS amount
FROM lastFilteredUsers
GROUP BY currency;