SQL FiddleКак получить записи между датами, которые находятся на разных строках?
У меня есть таблица под названием Event
, который регистрирует, когда игроки на входе сервера в многопользовательском и выходе из системы.
+----------------------------------------------+
| id | username | type | timestamp |
+----------------------------------------------+
| 1 | Player3 | login | 2014-01-14 17:00:00 |
| 2 | Player4 | login | 2014-01-14 17:00:00 |
| 3 | Player4 | logout | 2014-01-14 17:30:00 |
| 4 | Player1 | login | 2014-01-14 18:00:00 |
| 5 | Player2 | login | 2014-01-14 19:00:00 |
| 6 | Player3 | logout | 2014-01-14 19:00:00 |
| 7 | Player1 | logout | 2014-01-14 20:00:00 |
| 8 | Player2 | logout | 2014-01-14 20:00:00 |
+----------------------------------------------+
Я хотел бы получить уникальный список имен пользователей для тех, кто был в сети на определенную метку времени. Так, например, если я хочу знать, кто был в сети по адресу 2014-01-14 18:00:00
, он должен вернуть: Player1
и Player3
.
То, что я пытался до сих пор:
SELECT * FROM event
WHERE (timestamp <= '2014-01-14 18:00:00' AND type = 'login')
AND (timestamp >= '2014-01-14 18:00:00' AND type = 'logout');
EDIT2:
Session
стол:
+------------------------------------------------------+
| id | login_event | logout_event | duration (seconds) |
+------------------------------------------------------+
| 1 | 1 | 6 | xxxxxx |
| 2 | 2 | 3 | xxxxxx |
| 3 | 4 | 7 | xxxxxx |
| 4 | 5 | 8 | xxxxxx |
+------------------------------------------------------+
Спасибо! Я хочу, чтобы записи ввода/выхода были точными. Но какой из них лучше работает с большим количеством записей в таблице? – Jonathan
Производительность должна быть одинаковой для этих двух запросов. Вы можете повысить производительность, указав индекс на timestamp и добавив предложение where к первой версии, например 'where timestamp между '2014-01-13' и '2014-01-14 18: 00: 00'' (предполагая, что люди не проводят больше 42 часов). Это значительно сократит объем данных. –
Можете ли вы взглянуть на мое редактирование? У меня есть другая таблица под названием «Сессия», было бы лучше запросить эту таблицу? – Jonathan