-- View: per-ЖК velocity и средняя цена через rosreestr-сделки в cad-квартале, -- распределённые пропорционально flat_count. -- -- Логика: rosreestr_deals не имеет obj_id, но имеет quarter_cad_number. -- domrf_kn_objects.cad_quarter заполнен через spatial-join (см. 59). -- Для каждого квартала: суммируем сделки за 12 мес, распределяем по ЖК -- внутри квартала пропорционально их flat_count. -- -- estimated_velocity_pm — оценка скорости продаж конкретного ЖК (кв/мес). -- estimated_price_th_per_m2 — медианная цена сделок в квартале (тыс. ₽/м²). -- -- ВАЖНО: это АППРОКСИМАЦИЯ. Если в одном квартале несколько ЖК, доли точные -- только когда они продают равномерно. Для крупных одиночных ЖК (квартал -- содержит только их) — точно. CREATE OR REPLACE VIEW v_zk_rosreestr_velocity AS WITH zk_pool AS ( -- Берём последний snapshot каждого активного ЖК. SELECT DISTINCT ON (o.obj_id) o.obj_id, o.comm_name, o.dev_name, o.district_name, o.flat_count, o.cad_quarter, o.obj_class FROM domrf_kn_objects o WHERE o.region_cd = 66 AND o.cad_quarter IS NOT NULL AND o.flat_count IS NOT NULL AND o.flat_count > 0 AND o.site_status = 'Строящиеся' ORDER BY o.obj_id, o.snapshot_date DESC ), quarter_totals AS ( -- Сумма flat_count активных ЖК в каждом квартале (denominator для split). SELECT cad_quarter, SUM(flat_count)::numeric AS total_flats FROM zk_pool GROUP BY cad_quarter ), quarter_deals AS ( -- Rosreestr-сделки за 12 мес по каждому кварталу. SELECT quarter_cad_number AS cad_quarter, COUNT(*) AS deals_12mo, AVG(price_per_sqm) AS avg_price_pm, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY price_per_sqm) AS median_price_pm, AVG(area) AS avg_area_sqm FROM rosreestr_deals WHERE region_code = 66 AND doc_type = 'ДДУ' AND realestate_type_code = '002001003000' AND area > 10 AND area <= 200 AND price_per_sqm BETWEEN 30000 AND 1000000 AND period_start_date >= NOW() - INTERVAL '12 months' GROUP BY quarter_cad_number ) SELECT z.obj_id, z.comm_name, z.dev_name, z.district_name, z.obj_class, z.flat_count, z.cad_quarter, qt.total_flats AS quarter_total_flats, qd.deals_12mo AS quarter_deals_12mo, -- estimated deals = quarter_deals × my_flats / quarter_total_flats ROUND(qd.deals_12mo * z.flat_count::numeric / qt.total_flats, 1) AS estimated_deals_12mo, ROUND(qd.deals_12mo * z.flat_count::numeric / qt.total_flats / 12.0, 2) AS estimated_velocity_pm, ROUND(qd.median_price_pm / 1000.0, 1) AS median_price_th_per_m2, ROUND(qd.avg_area_sqm, 1) AS avg_deal_area_sqm FROM zk_pool z JOIN quarter_totals qt ON qt.cad_quarter = z.cad_quarter JOIN quarter_deals qd ON qd.cad_quarter = z.cad_quarter ; COMMENT ON VIEW v_zk_rosreestr_velocity IS 'Per-ЖК аппроксимация скорости продаж и медианной цены через rosreestr_deals ' 'квартала, распределённые по ЖК пропорционально flat_count. Источник для ' 'cross-validation domrf_kn_sale_graph и обнаружения ЖК-аутлайеров.';