DBIx::Class Query: my $runs = $schema->resultset('ScheduleRun')->search({ -or => [ -and => [ 'schedule.initiated' => 0, \'UNIX_TIMESTAMP(schedule.first_run) > now()', ], -and => [ 'schedule.initiated' => 1, \'(select UNIX_TIMESTAMP(rt.run_begin) from schedule_runs rt where rt.sched_id = me.sched_id order by id desc limit 1) + schedule.frequency > now()', ], ] }, { join => qw/schedule/, prefetch => qw/schedule/, }); REAL Query: SELECT me.id, me.sched_id, me.run_begin, me.run_end, me.success, me.description, schedule.id, schedule.source_id, schedule.first_run, schedule.initiated, schedule.frequency FROM schedule_runs me JOIN schedule schedule ON ( schedule.id = me.sched_id ) WHERE ( ( ( ( ( schedule.initiated = ? ) AND UNIX_TIMESTAMP(schedule.first_run) > now() ) ) OR ( ( ( schedule.initiated = ? ) AND (select UNIX_TIMESTAMP(rt.run_begin) from schedule_runs rt where rt.sched_id = me.sched_id order by id desc limit 1) + schedule.frequency > now() ) ) ) ): '0', '1'