Нужна помощь в реализации оконной функции в sqlalchemy

#sqlalchemy #window-functions

Вопрос:

Я пытаюсь реализовать эту функцию окна:

  1. он сгруппирован по идентификатору портфолио.
  2. в каждой группе найдите последнюю версию.
  3. возвращает записи с последней версией в каждой группе.

Я попытался реализовать это так в sqlalchemy:

  subquery = session.query(
        MyTable,
        func.row_number().over(
          partition_by=MyTable.portfolio_id,
          order_by=MyTable.version.desc()).label("row_number")
      ).subquery()
      LOG.info("subquery is {}".format(subquery))

      current_config = session.query(subquery).filter(subquery.c.row_number <= 1)
 

Но журнал показывает, что запрос такой:

  SELECT anon_1.id AS anon_1_id, anon_1.portfolio_id AS anon_1_portfolio_id, anon_1.portfolio_name AS anon_1_portfolio_name, anon_1.version AS anon_1_version, anon_1.created_at AS anon_1_created_at, anon_1.last_updated_at AS anon_1_last_updated_at, anon_1.last_updated_by AS anon_1_last_updated_by, anon_1.config AS anon_1_config, anon_1.row_number AS anon_1_row_number 
FROM (SELECT config_table_development.id AS id, config_table_development.portfolio_id AS portfolio_id, config_table_development.portfolio_name AS portfolio_name, config_table_development.version AS version, config_table_development.created_at AS created_at, config_table_development.last_updated_at AS last_updated_at, config_table_development.last_updated_by AS last_updated_by, config_table_development.config AS config, row_number() OVER (PARTITION BY config_table_development.portfolio_id ORDER BY config_table_development.version DESC) AS row_number 
FROM config_table_development) AS anon_1 
WHERE anon_1.row_number <= ?
 

Где определенно мы не ожидаем «ГДЕ anon_1.row_number<=?», и мы должны ожидать «ГДЕ anon_1.row_number Как я мог это исправить? большое спасибо!