I have a query with duplicate expressions in it. Could it be written more compact?
select id from `vacature_saved_searches`
where `saved_search_interval` = 1 and
DAYOFWEEK(CURDATE()) BETWEEN 2 AND 6 and
`last_processing_started_datetime` < CURDATE() - INTERVAL 1 HOUR
UNION
select id from `vacature_saved_searches`
where `saved_search_interval` = 2 and
DAYOFWEEK(CURDATE()) IN (2, 4, 6) and
`last_processing_started_datetime` < CURDATE() - INTERVAL 1 HOUR
UNION
select id from `vacature_saved_searches`
where `saved_search_interval` = 3 and
DAYOFWEEK(CURDATE()) = 3 AND
`last_processing_started_datetime` < CURDATE() - INTERVAL 1 HOUR
UNION
select id from `vacature_saved_searches`
where `saved_search_interval` = 4 and
DAYOFWEEK(CURDATE()) = 3 and
DAYOFMONTH(CURDATE()) BETWEEN 1 AND 7 and
`last_processing_started_datetime` < CURDATE() - INTERVAL 1 HOUR;
You can use a combination of DISTINCT and rephrasing the query to use OR clauses rather than unions: