QUERY PLAN
Aggregate (cost=1056.71..1056.72 rows=1 width=8)
-> Sort (cost=1056.53..1056.56 rows=12 width=65)
Sort Key: w.start_at
-> Subquery Scan on w (cost=25.54..1056.31 rows=12 width=65)
-> Append (cost=25.54..1056.19 rows=12 width=65)
-> Hash Right Join (cost=25.54..27.08 rows=1 width=49)
Hash Cond: (wlso.id = w_1.scenario_option_id)
-> Seq Scan on tbl_work_log_scenario_options wlso (cost=0.00..1.39 rows=39 width=20)
-> Hash (cost=25.52..25.52 rows=1 width=32)
-> Index Scan using tbl_work_logs_created_by_idx on tbl_work_logs w_1 (cost=0.29..25.52 rows=1 width=32)
Index Cond: ((created_by = ANY ('{1015,1015,1022,1023,5248}'::integer[])) AND (created_by = 1015))
Filter: ((start_at IS NOT NULL) AND (end_at IS NOT NULL) AND (NOT is_draft) AND (((start_at >= '2026-07-15 00:00:00+08'::timestamp with time zone) AND (end_at < '2026-07-15 23:59:59+08'::timestamp with time zone)) OR ((start_at <= '2026-07-15 00:00:00+08'::timestamp with time zone) AND (end_at > '2026-07-15 00:00:00+08'::timestamp with time zone)) OR ((start_at <= '2026-07-15 23:59:59+08'::timestamp with time zone) AND (end_at > '2026-07-15 23:59:59+08'::timestamp with time zone))))
-> Result (cost=74.20..1029.10 rows=11 width=65)
-> Append (cost=74.20..1028.99 rows=11 width=65)
-> Bitmap Heap Scan on tbl_schedules (cost=74.20..140.37 rows=5 width=109)
Recheck Cond: ((created_by = ANY ('{1004,1001,5087,1015,1015,1023,5360,1022,5311,5311,5248,5476,5500,5252,1013,5300,1005,5499,5332,1011,5295}'::integer[])) AND (created_by = 1015))
Filter: (((start_at IS NOT NULL) OR (end_at IS NOT NULL)) AND (((CASE WHEN (start_at IS NULL) THEN CASE WHEN (end_at < now()) THEN CASE WHEN is_complete THEN created_at ELSE end_at END ELSE CASE WHEN is_complete THEN created_at ELSE now() END END ELSE start_at END >= '2026-07-15 00:00:00+08'::timestamp with time zone) AND (CASE WHEN (end_at IS NULL) THEN CASE WHEN (start_at > now()) THEN start_at ELSE CASE WHEN is_complete THEN complete_at ELSE now() END END ELSE CASE WHEN ((start_at IS NULL) AND (end_at < now())) THEN CASE WHEN is_complete THEN complete_at ELSE now() END ELSE end_at END END < '2026-07-15 23:59:59+08'::timestamp with time zone)) OR ((CASE WHEN (start_at IS NULL) THEN CASE WHEN (end_at < now()) THEN CASE WHEN is_complete THEN created_at ELSE end_at END ELSE CASE WHEN is_complete THEN created_at ELSE now() END END ELSE start_at END <= '2026-07-15 00:00:00+08'::timestamp with time zone) AND (CASE WHEN (end_at IS NULL) THEN CASE WHEN (start_at > now()) THEN start_at ELSE CASE WHEN is_complete THEN complete_at ELSE now() END END ELSE CASE WHEN ((start_at IS NULL) AND (end_at < now())) THEN CASE WHEN is_complete THEN complete_at ELSE now() END ELSE end_at END END > '2026-07-15 00:00:00+08'::timestamp with time zone)) OR ((CASE WHEN (start_at IS NULL) THEN CASE WHEN (end_at < now()) THEN CASE WHEN is_complete THEN created_at ELSE end_at END ELSE CASE WHEN is_complete THEN created_at ELSE now() END END ELSE start_at END <= '2026-07-15 23:59:59+08'::timestamp with time zone) AND (CASE WHEN (end_at IS NULL) THEN CASE WHEN (start_at > now()) THEN start_at ELSE CASE WHEN is_complete THEN complete_at ELSE now() END END ELSE CASE WHEN ((start_at IS NULL) AND (end_at < now())) THEN CASE WHEN is_complete THEN complete_at ELSE now() END ELSE end_at END END > '2026-07-15 23:59:59+08'::timestamp with time zone))))
-> Bitmap Index Scan on tbl_schedules_created_by_idx (cost=0.00..74.19 rows=19 width=0)
Index Cond: ((created_by = ANY ('{1004,1001,5087,1015,1015,1023,5360,1022,5311,5311,5248,5476,5500,5252,1013,5300,1005,5499,5332,1011,5295}'::integer[])) AND (created_by = 1015))
-> Subquery Scan on "*SELECT* 3" (cost=0.00..888.56 rows=6 width=65)
-> Seq Scan on tbl_calendars c (cost=0.00..888.50 rows=6 width=77)
Filter: ((start_at IS NOT NULL) AND (end_at IS NOT NULL) AND (created_by = 1015) AND (created_by = ANY ('{1015,1015,1023,1022,5248}'::integer[])) AND (((start_at >= '2026-07-15 00:00:00+08'::timestamp with time zone) AND (end_at < '2026-07-15 23:59:59+08'::timestamp with time zone)) OR ((start_at <= '2026-07-15 00:00:00+08'::timestamp with time zone) AND (end_at > '2026-07-15 00:00:00+08'::timestamp with time zone)) OR ((start_at <= '2026-07-15 23:59:59+08'::timestamp with time zone) AND (end_at > '2026-07-15 23:59:59+08'::timestamp with time zone))))