Вот окончательный вариант: [sql]select `id`,t.account_id, `value`, `time_point`, t.`user_id` from `values` as t join (select account_id, max(`values`.time_point) as mtp from `values` where `values`.time_point<='2020-04-01 00:00:00' group by `account_id`) as actT on t.account_id=actT.account_id and t.time_point=actT.mtp[/sql] Осталось определиться с индексами для таблички `values` и в бой =) тестить в условиях реальности. Интересная задачка получилась.. не ожидал а условие t.time_point=actT.mtp обязательно? по ид записи никак нельзя связать? (могу неверно понимать запрос =)
Понекропостим немного =) [sql]SELECT accounts.id, accounts.account, providers.caption, counters.caption, clients.street, clients.home, clients.room, clients.responsible, clients.phone_number, vals.`value`, vals.time_point FROM accounts Left Join providers ON accounts.provider_id = providers.provider Left Join counters ON accounts.counter_id = counters.counter Left Join clients ON accounts.client_id = clients.client Left Join (SELECT `id`, t.account_id as values_acc_id, `value`, `time_point`, t.`user_id` FROM `values` as t JOIN (select account_id, max(`values`.time_point) as mtp from `values` where `values`.time_point<='2010-04-02 00:00:00' group by `account_id`) as actT on t.account_id=actT.account_id and t.time_point=actT.mtp) AS vals ON accounts.id=vals.values_acc_id[/sql] Меня пугает этот запрос =) а Вас?) не станет ли он причиной нагрузок на бд?
akrinel, легко =) вот только что значит погонять?) есть ли какие-нить стандартные методы гоняния? =) тесты запросов на узкие места.. что-то у скула было на этот счет вроде
Тогда этот http://www.php.ru/forum/viewtopic.php?t=24437 должен вводить тебя в состояние комы. set profiling=1; и свой запрос с разными условиями. затем show profiles; отдельно можно сделать explain запрос и посмотреть как предполагается выборка.
Поскольку занимаюсь этим делом редко(да, да я лентяй и быдлокодер) забываю постоянно что там да как с этим профайлером, и меня выручает вот эта статья. Рекоммендую.