fix(analytics): dedupe comparables — domrf_kn_objects has 3x snapshots per obj_id
The comparables block on /analytics/recommend was showing the same ЖК multiple times (ЖК СТАРТ × 3, ЭХО ЛЕСА × 2 etc) because domrf_kn_objects has ~3 historical snapshots per obj_id. The previous query joined all rows and LIMIT 5 cherry-picked duplicates by flat_count. Fix: wrap base in CTE `latest_obj` with `DISTINCT ON (obj_id) ORDER BY obj_id, snapshot_date DESC` to pick only the latest snapshot per object before sorting by flat_count.
This commit is contained in:
parent
9658baa6b2
commit
0de32cd2ce
1 changed files with 11 additions and 4 deletions
|
|
@ -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
|
||||
"""
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue