На данный момент это единственно верный ответ. Остальные будут давать кратные размеры. Потому что если дат как в таблице прихода так и в таблице выхода может быть несколько - то суммировать надо заранее в подзапросах(можно конечно ещё хитрей - но это сложновато). Да, ещё непонятно всё таки что надо брать данные из income/outcome или из поля summa.
вариант с concat - бред полный, зачем? Дополнительно преобразовывать в текст, чтобы потом всё равно сравнивать?
а второй запрос:
SELECT * FROM table as a JOIN table as b ON a.param1 = b.param1 AND a.param2 = b.param2 AND a.param3 = b.param3 WHERE a.id = '1';
именно то что надо, быстрее и универсальнее ничего не выдумать
Чё то непонятно, а если сессия началась в 18:59, а закончилась в 20:01, то этот юзер не попадёт что он был онлайн ни в какой час?
Или не попадёт тот которые начал в 19:01 и закончил в 19:59.
Я думаю что если и агрегировать, то так:
time_start between @time_start and @time_end or time_end between @time_start and time_end or (time_start <@time_start and time_end>@time_end)
Но в этом случае юзер может попасть в онлайн в два промежутка.
square, то что ошибка тут - это да, но даже если бы ошибки не было бы, то всё равно может выдавать каждый раз разный результат. Например есть 5 учителей, у которых 20 общих учеников, а показать надо 2. база может каждый раз выдавать только 2-ух из 5-ти.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.