SELECT `table1`.`username`, `table1`.`dt`, `table1`.`value`, (
SELECT `table2`.`value`
FROM `table2`
WHERE `table1`.`username` = `table2`.`username`
ORDER BY ABS(TIMESTAMPDIFF(SECOND, `table1`.`dt`,`table2`.`dt`)) ASC
LIMIT 1
) AS `t2value`
FROM `table1`
Увы, эффективностью тут и не пахнет - EXPLAIN говорит, что в подзапросе будет "
Using where; Using temporary; Using filesort" даже с индексами по полям `dt` - т.е. для каждого username из первой таблицы будет выполняться вычисление разницы времени с каждой записью с таким же username из таблицы 2.
Хотя, если на каждый username в таблице не по 10+ записей, то будет ещё терпимо.
И, ради бога,
используйте вместо table1,table2 нормальный JOIN.