diff --git a/backend/app/services/analytics_queries.py b/backend/app/services/analytics_queries.py index ff2361b9..89dcaf1b 100644 --- a/backend/app/services/analytics_queries.py +++ b/backend/app/services/analytics_queries.py @@ -2089,22 +2089,29 @@ def recommend_mix( FROM v_complex_full ORDER BY lower(canonical_name), cad_buildings_n DESC NULLS LAST ) + latest_obj AS ( + -- domrf_kn_objects содержит ~3 snapshot'а на obj_id; + -- берём только самый свежий, иначе comparables дублируются + SELECT DISTINCT ON (obj_id) * + FROM domrf_kn_objects + WHERE region_cd = :rc + AND district_name = :dn + AND (CAST(:cls AS TEXT) IS NULL OR obj_class = :cls) + ORDER BY obj_id, snapshot_date DESC NULLS LAST + ) SELECT o.obj_id, o.comm_name, o.dev_name, o.obj_class, o.flat_count, a.perc AS sold_perc, c.cad_quarter, c.latitude AS lat, c.longitude AS lon, c.cad_buildings_n AS buildings_n - FROM domrf_kn_objects o + FROM latest_obj o LEFT JOIN latest_agg la ON la.obj_id = o.obj_id LEFT JOIN domrf_kn_sales_agg a ON a.obj_id = la.obj_id AND a.snapshot_date = la.snap AND a.type = 'apartments' LEFT JOIN vcf_dedup c ON c.name_key = lower(o.comm_name) - WHERE o.region_cd = :rc - AND o.district_name = :dn - AND (CAST(:cls AS TEXT) IS NULL OR o.obj_class = :cls) ORDER BY o.flat_count DESC NULLS LAST LIMIT 5 """