У меня есть вызов, с которым я не могу найти ответы на любые обычные способы. Я хочу сделать как можно больше в одном запросе, потому что моя единственная альтернатива - это сценарий этой функции, а foreach - цикл с бесчисленными подзапросами.Сопряжение элементов в SQL и вычитание результата
Итак, у меня есть таблица протоколирования на сервере MySQL, он имеет следующие столбцы: Key, USERID, даты-времени и положение позиция может быть «начать», «вход» и «конец».
Я хочу узнать разницу между «стартом», «login» и «end» для каждого события входа. У кого-нибудь есть идея SQL-запроса, который я мог бы использовать? Я думаю, что это как-то связано с запросом в запросе, но я могу найти только JOINs?
Я полагаю, что сначала я бы выбрал события «start», а затем для каждого события «start» он должен искать следующее первое событие входа для «UserID» (после времени «start», но меньше время следующего «запуска» для того же «UserID»), затем DATE_SUB(), чтобы узнать разницу. Было бы важно отфильтровать события «входа» или «завершения», которые произойдут после будущего «стартового» события, если это не произойдет.
Я был бы очень признателен, если бы кто-нибудь мог спасти меня, делая это в Excel, потому что тогда я могу избежать ощущения слишком грязного с тысячами vlookup. Я рассматриваю это в PHP или Perl и просто создаю цикл с операторами LIMIT 1 SQL, но это может создать тысячи SQL-запросов по сравнению с одним достойным оператором SQL SELECT.
Можете ли вы показать нам примерную таблицу с 5 записями и какой результат вы ищете, учитывая, что эти 5 штук? – Matt
Почему бы не обновить три даты в одной строке? Если вы точно знаете, что у каждого пользователя будет время начала, время входа в систему и время окончания, может быть, вам лучше со стола, например, tbl (key, uid, start, login, end)? – Jai