#sqlalchemy #window-functions
Вопрос:
Я пытаюсь реализовать эту функцию окна:
- он сгруппирован по идентификатору портфолио.
- в каждой группе найдите последнюю версию.
- возвращает записи с последней версией в каждой группе.
Я попытался реализовать это так в 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 Как я мог это исправить? большое спасибо!