If you can have a limited number of repetitions, you can create a Numbers table like this:
CREATE TABLE numbers (
num INT,
i INT
);
INSERT INTO numbers VALUES
(1,1),
(2,1),
(2,2),
(3,1),
(3,2),
(3,3),
(4,1),
(4,2),
(4,3),
(4,4),
...
then you can use a JOIN:
SELECT
ID,
`START` + INTERVAL CASE WHEN FREQUENCY='daily' THEN i-1 ELSE 0 END DAY
+ INTERVAL CASE WHEN FREQUENCY='yearly' THEN i-1 ELSE 0 END YEAR
as `Date`,
RESOURCE
FROM
yourtable INNER JOIN numbers
ON yourtable.REPETITIONS = numbers.num
ORDER BY
ID, numbers.i
Please see fiddle here.