CREATE FUNCTION SearchRoot(id INT)
BEGIN
DECLARE parent INT;
SET parent = id;
REPEAT
SET id = parent;
SET parent = (SEARCH `id_parent` FROM `table` WHERE `id` = id);
UNTIL parent > 0 END REPEAT;
RETURN id;
END
SELECT `t2`.*
FROM (
SELECT `t1`.`strana`, `t1`.`min_price`, MAX(`t2`.`date`) AS `max_date`
FROM (
SELECT `strana`, MIN(`price`) AS `min_price`
FROM `table`
GROUP BY `strana`
) AS `t1`
JOIN `table` AS `t2` ON `t2`.`strana` = `t1`.`strana`
AND `t2`.`price` = `t1`.`min_price`
GROUP BY `strana`
) AS `t1`
JOIN `table` AS `t2` ON `t2`.`strana` = `t1`.`strana`
AND `t2`.`date` = `t1`.`max_date` AND `t2`.`price` = `t1`.`min_price`