QUERY PLAN
Group (cost=7345.82..7347.00 rows=200 width=4)
Group Key: w.created_by
-> Sort (cost=7345.82..7346.41 rows=235 width=4)
Sort Key: w.created_by
-> Hash Join (cost=359.88..7336.57 rows=235 width=4)
Hash Cond: (w.created_by = u.id)
-> Append (cost=351.33..7318.86 rows=722 width=65)
-> Nested Loop Left Join (cost=351.33..3265.79 rows=1 width=307)
Join Filter: (wlso.id = w.scenario_option_id)
-> Bitmap Heap Scan on tbl_work_logs w (cost=351.33..3263.91 rows=1 width=32)
Recheck Cond: (created_by = ANY ('{1000,1001,1004,1005,1011,1013,1015,1017,1022,1023,5016,5064,5085,5087,5248,5250,5252,5295,5296,5300,5311,5329,5332,5360,5388,5404,5420,5440,5445,5446}'::integer[]))
Filter: ((NOT is_draft) AND (((start_at >= '2025-07-04 00:00:00+08'::timestamp with time zone) AND (end_at < '2025-07-04 23:59:59+08'::timestamp with time zone)) OR ((start_at <= '2025-07-04 00:00:00+08'::timestamp with time zone) AND (end_at > '2025-07-04 00:00:00+08'::timestamp with time zone)) OR ((start_at <= '2025-07-04 23:59:59+08'::timestamp with time zone) AND (end_at > '2025-07-04 23:59:59+08'::timestamp with time zone))) AND (((start_at >= '2025-07-04 00:00:00+08'::timestamp with time zone) AND (end_at < '2025-07-04 23:59:59+08'::timestamp with time zone)) OR ((start_at <= '2025-07-04 00:00:00+08'::timestamp with time zone) AND (end_at > '2025-07-04 00:00:00+08'::timestamp with time zone)) OR ((start_at <= '2025-07-04 23:59:59+08'::timestamp with time zone) AND (end_at > '2025-07-04 23:59:59+08'::timestamp with time zone))))
-> Bitmap Index Scan on tbl_work_logs_created_by_idx (cost=0.00..351.32 rows=21143 width=0)
Index Cond: (created_by = ANY ('{1000,1001,1004,1005,1011,1013,1015,1017,1022,1023,5016,5064,5085,5087,5248,5250,5252,5295,5296,5300,5311,5329,5332,5360,5388,5404,5420,5440,5445,5446}'::integer[]))
-> Seq Scan on tbl_work_log_scenario_options wlso (cost=0.00..1.39 rows=39 width=278)
-> Result (cost=183.82..4053.06 rows=721 width=65)
-> Append (cost=183.82..4045.85 rows=721 width=65)
-> Hash Left Join (cost=183.82..2433.33 rows=719 width=110)
Hash Cond: (tbl_schedules.id = ccr.schedule_id)
Filter: (((tbl_schedules.is_public = 1) AND (tbl_schedules.created_by <> 1000)) OR (tbl_schedules.created_by = 1000) OR (ccr.user_id = 1000))
-> Bitmap Heap Scan on tbl_schedules (cost=165.31..2393.38 rows=736 width=142)
Recheck Cond: (created_by = ANY ('{1000,1001,1004,1005,1011,1013,1015,1017,1022,1023,5016,5064,5085,5087,5248,5250,5252,5295,5296,5300,5311,5329,5332,5360,5388,5404,5420,5440,5445,5446}'::integer[]))
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 >= '2025-07-04 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 < '2025-07-04 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 <= '2025-07-04 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 > '2025-07-04 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 <= '2025-07-04 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 > '2025-07-04 23:59:59+08'::timestamp with time zone))) 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 >= '2025-07-04 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 < '2025-07-04 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 <= '2025-07-04 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 > '2025-07-04 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 <= '2025-07-04 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 > '2025-07-04 23:59:59+08'::timestamp with time zone))))
-> Bitmap Index Scan on tbl_schedules_created_by_idx (cost=0.00..165.12 rows=8598 width=0)
Index Cond: (created_by = ANY ('{1000,1001,1004,1005,1011,1013,1015,1017,1022,1023,5016,5064,5085,5087,5248,5250,5252,5295,5296,5300,5311,5329,5332,5360,5388,5404,5420,5440,5445,5446}'::integer[]))
-> Hash (cost=10.45..10.45 rows=645 width=8)
-> Seq Scan on tbl_schedule_carbon_copy_rels ccr (cost=0.00..10.45 rows=645 width=8)
-> Subquery Scan on "*SELECT* 3" (cost=0.00..1605.33 rows=2 width=65)
-> Seq Scan on tbl_calendars c (cost=0.00..1605.31 rows=2 width=78)
Filter: ((((is_public = 1) AND (created_by <> 1000)) OR (created_by = 1000)) AND (((start_at >= '2025-07-04 00:00:00+08'::timestamp with time zone) AND (end_at < '2025-07-04 23:59:59+08'::timestamp with time zone)) OR ((start_at <= '2025-07-04 00:00:00+08'::timestamp with time zone) AND (end_at > '2025-07-04 00:00:00+08'::timestamp with time zone)) OR ((start_at <= '2025-07-04 23:59:59+08'::timestamp with time zone) AND (end_at > '2025-07-04 23:59:59+08'::timestamp with time zone))) AND (((start_at >= '2025-07-04 00:00:00+08'::timestamp with time zone) AND (end_at < '2025-07-04 23:59:59+08'::timestamp with time zone)) OR ((start_at <= '2025-07-04 00:00:00+08'::timestamp with time zone) AND (end_at > '2025-07-04 00:00:00+08'::timestamp with time zone)) OR ((start_at <= '2025-07-04 23:59:59+08'::timestamp with time zone) AND (end_at > '2025-07-04 23:59:59+08'::timestamp with time zone))) AND (created_by = ANY ('{1000,1001,1004,1005,1011,1013,1015,1017,1022,1023,5016,5064,5085,5087,5248,5250,5252,5295,5296,5300,5311,5329,5332,5360,5388,5404,5420,5440,5445,5446}'::integer[])))
-> Hash (cost=7.74..7.74 rows=65 width=4)
-> Seq Scan on tbl_users u (cost=0.00..7.74 rows=65 width=4)
Filter: (department_id = 1)