A correct form of the query would be: SELECT t1.date, (SELECT v1.type_id FROM tbl_values v1 where v1.date <= t1.date ORDER BY v1.date desc limit 1) as `type`, (SELECT v1.`value` FROM tbl_values v1 where v1.date <= t1.date ORDER BY v1.date desc limit 1) as `value` FROM tbl_calendar t1 having `type` IS NOT NULL with result as: 2016-12-02 100 1.00 2016-12-03 100 1.00 2016-12-04 100 2.00 2016-12-05 100 2.00 2016-12-06 100 3.00 2016-12-07 100 3.00 2016-12-08 100 4.00 2016-12-09 100 4.00 2016-12-10 100 5.00 but, again look at your query and your expected result please. What do you want to have in the result (**type, date, value**) with: SELECT c.date, o1.value_id AS "o1.value_id", o2.value_id AS "o2.value_id", o1.type_id AS "o1.type_id", o2.type_id AS "o2.type_id", o1.date AS "o1.date", o2.date AS "o2.date" **??? of course the community can give answers for mostly all questions, but it is difficult when the question is not concise - what do you really want?! You must put a little work into the process!**