fix(competitors): _AVG_PRICE_SQL — фильтр latest snapshot (#1210) #1264

Merged
bot-backend merged 1 commit from fix/competitors-avg-price-latest-snapshot into main 2026-06-13 06:17:27 +00:00

View file

@ -437,6 +437,12 @@ _COMPETITORS_SQL = text("""
# заполнен слабо (~0.2%), поэтому flats_sold чаще будет 0/мало → stage_at_horizon
# падает в нейтраль 0.5 (graceful, см. helper). Колонка добавлена в ТОТ ЖЕ запрос
# (без 4-го db.execute), чтобы не ломать существующие callers/тесты.
# #1210: domrf_kn_flats версионируется (UNIQUE(id, snapshot_date) — м.50,
# scraper UPSERT per snapshot). Без фильтра snapshot_date AVG усреднял
# ИСТОРИЮ цен (stale на растущем рынке), а COUNT '%прод%' множил sold ×N
# снапшотов (raw_sold/flat_count кратно завышен → попадал в гард-нейтраль
# 0.5 или искажал stage_at_horizon). Берём ТОЛЬКО latest snapshot — зеркало
# паттерна best_layouts._SUPPLY_BATCH_SQL и _COMPETITORS_SQL DISTINCT ON.
_AVG_PRICE_SQL = text("""
SELECT
f.obj_id,
@ -448,6 +454,9 @@ _AVG_PRICE_SQL = text("""
) AS flats_sold
FROM domrf_kn_flats f
WHERE f.obj_id = ANY(:obj_ids)
AND f.snapshot_date = (
SELECT MAX(snapshot_date) FROM domrf_kn_flats
)
GROUP BY f.obj_id
""")