QUERY PLAN
Limit (cost=2127.50..2129.60 rows=20 width=509)
-> Unique (cost=2127.50..2129.70 rows=21 width=509)
-> Sort (cost=2127.50..2127.55 rows=21 width=509)
Sort Key: p.updated_at DESC, p.id, p.client_id, p.project_progress, p.budget, p.profit_pct, p.bargain_date, p.description, p.created_by, p.created_at, p.engineer_id, p.project_title, p.collected, p.status_updated_at, p.success_rate, p.comment, p.contract_type, p.progress_updated_at, p.forecast_updated_at, p.end_at, p.pinyin_shortcut, p.creator, p.used_client, p.from_contact, p.total_contact_point, p.paid_contact_point, p.project_product_version_id, p.is_sales_order_ready, p.collected_plan, p.change_status_to, p.is_verify, (((p.budget / '100'::numeric) * p.profit_pct)), ((now() - p.status_updated_at)), ((now() - p.progress_updated_at)), ((now() - p.forecast_updated_at)), ((date_part('epoch'::text, (now() - max(sl.end_at))) / '86400'::double precision)), (max(sl.end_at)), ((date_part('epoch'::text, (now() - max(arrive.end_at))) / '86400'::double precision)), (max(arrive.end_at)), (CASE WHEN (p.end_at IS NOT NULL) THEN (p.end_at - p.created_at) ELSE (now() - p.created_at) END), ((SubPlan 1))
-> GroupAggregate (cost=1205.84..2127.04 rows=21 width=509)
Group Key: p.id
-> Sort (cost=1205.84..1206.43 rows=237 width=365)
Sort Key: p.id
-> Nested Loop Left Join (cost=0.86..1196.49 rows=237 width=365)
-> Nested Loop Left Join (cost=0.57..704.96 rows=21 width=357)
-> Nested Loop Left Join (cost=0.28..628.02 rows=21 width=353)
-> Seq Scan on tbl_projects p (cost=0.00..513.82 rows=21 width=349)
Filter: ((bargain_date >= '2026-01-01'::date) AND (bargain_date <= '2026-12-31'::date) AND (project_status = 3) AND (created_by = ANY ('{1001,1004,1005,1013,5087,5295,5300,5311,5332,5449,5467,5476}'::integer[])) AND (created_by = ANY ('{1001,5049,5301,5022,5209,5026,5293,5309,5356,5329,5299,5303,5302,5332,5047,1026,5096,5070,5448,5420,1029,5037,5087,1008,5048,5043,5045,5230,5031,5088,5208,1003,5467,5294,5357,5044,1030,5076,5300,5027,5089,5311,5066,5069,5364,1009,5295,1013,5128,5203,1025,5032,5075,5476,1004,5072,5033,5359,5412,5409,5229,1005,5304,5449,5358,1006,5093}'::integer[])))
-> Index Only Scan using tbl_clients_pkey on tbl_clients c (cost=0.28..5.44 rows=1 width=4)
Index Cond: (id = p.client_id)
-> Index Scan using tbl_work_logs_client_id_idx on tbl_work_logs arrive (cost=0.29..3.65 rows=1 width=12)
Index Cond: ((client_id = c.id) AND (client_id IS NOT NULL))
Filter: ((NOT is_draft) AND (location_in_id IS NOT NULL) AND (location_out_id IS NOT NULL) AND (scenario_id = 1))
-> Index Scan using tbl_work_logs_project_id_idx on tbl_work_logs sl (cost=0.29..23.36 rows=5 width=12)
Index Cond: (project_id = p.id)
SubPlan 1
-> Aggregate (cost=43.63..43.64 rows=1 width=32)
-> Seq Scan on tbl_invoices i (cost=0.00..43.62 rows=1 width=6)
Filter: (project_id = p.id)