gunlinux
@gunlinux
Freelancer

Как отфильтровать результат OVER запрос с row_number function?

Есть таблица пользователей, которая при выводе сортируется по User.timestamp.
показать "ваш номер в списке". Текущее решение работает, но мне надо еще фильтровать по role_id==current_user.role_id пользователя.

Алгоритм:
1. делаем выборку всех записей отсортированных по User.timestamp,
2. Ищем запись с текущим user_id

Не получается в первый этап воткнуть фильтр по роли.

query = db.session.query(
        User.id,
        over(
            func.row_number(),
            order_by=User.timestamp
        )
    ).filter(User.id == current_user.id).first()


SELECT "user".id AS user_id,"user".role_id as role_id,  row_number()
        OVER (ORDER BY "user".timestamp )
        AS anon_1 FROM "user" WHERE "user".id = {0}


Проболвал funcfilter, но он в каком-то непонятном состоянии
  • Вопрос задан
  • 529 просмотров
Решения вопроса 1
gunlinux
@gunlinux Автор вопроса
Freelancer
Как выяснилось запрос был некорректным

WITH UsersRez AS
    (
        SELECT "user".role_id as role_id, "user".id as user_id, ROW_NUMBER()
            OVER (ORDER BY timestamp  DESC) AS RowNumber
        FROM "user" where role_id={0}
    )
    SELECT RowNumber,user_id
    FROM UsersRez
        WHERE user_id    = {1}
.format(current_user.role.id, current_user.id)

Результат симулируем поведение того же freelansim, вы 1052 фрилансер в списке
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы