Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сравнение разницы времени с диапазоном / 3 сообщений из 3, страница 1 из 1
17.02.2015, 18:30:19
    #38882146
mailler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение разницы времени с диапазоном
Здравствуйте. Попалась задачка и не пойму как ее решить. Есть таблица с сохранениями всех действий пользователей над квестами.

idquest_iduser_idtimeaction111111111021111112103111134111421111111052111221116221111110722112211182311111109231122111

Есть ID квеста, ID пользователя, время(Unixtime) и какое действие было выполнено(1 - выполнен квест, 0 - начат).

Нужно определить сколько пользователей выполнило каждый квест уложившись в заданный промежуток.
Если у нас есть промежуток, например, от 1 до 5 минут, то нужно взять какую-то запись с action = 1(такая будет уникальная), для нее найти пару с таким же quest_id и user_id, но где action = 0(причем таких записей может быть несколько, нам нужно взять ту, где время минимальное), посмотреть попадает ли разница в значении полей time в заданный промежуток, а потом сгрупировать по quest_id и сделать count по полю user_id.
В итоге для таблицы из примера должно получиться что-то типа:

quest_idusers_count1123
Для первого квеста его выполнили в заданное время 1 человек, для второго 3.

Натолкните на мысль как это все можно сделать через SQL запрос. Перебором в коде программы я это сделать могу, но тогда пропадает возможность задавать LIMIT и OFFSET при запросе, что не очень хорошо.
...
Рейтинг: 0 / 0
18.02.2015, 04:56:14
    #38882387
Сравнение разницы времени с диапазоном
mailler,

для выбора "нужно взять ту, где время минимальное" начни читать отсюда , далее просто джойнишь исходную таблицу с найденными "минимальными" временами.
...
Рейтинг: 0 / 0
18.02.2015, 05:06:22
    #38882389
Сравнение разницы времени с диапазоном
mailler,

а в твоем конкретном случае всё ещё проще:
0) в деривед-тэйбле ищешь минимумы времени в разрезе quest_id и user_id с фильтрацией по action = 0
1) джойнишь результат на исходную таблицу, отфильтрованную по условию action = 1
3) группируешь по квесту, считаешь кол-во
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сравнение разницы времени с диапазоном / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]