У меня есть игра, которая выдает информацию о состоянии в базу данных. Например. Подключено, потеряно соединение, захвачен экранный дамп и т. Д.
Каждое состояние определяется полем с именем StateTypeId
, который является внешним ключом для простой справочной таблицы 'StateTypes'
.
Теперь я пытаюсь найти всех людей, которые в настоящее время 'Connected
' (например, StateTypeId == 1), и я не уверен, как это сделать. Когда я говорю в данный момент подключен , я имею в виду, что у пользователя нет состояния 'LostConnection
' (т.е. StateType == 2) в качестве самой последней записи.
Я думал так же.
SELECT UserId
FROM UserData
WHERE StateType = 1
GROUP BY UserId
или
SELECT UserId
FROM UserData
WHERE StateType != 1
GROUP BY UserId
но это возвращает все результаты, а не только самые последние вещи.
Есть предложения?
(я предполагаю, что мне не хватает TOP(1)
и какой-то ранг / порядок вещей?)
EDIT
DOH! я забыл упомянуть, у меня действительно есть столбец DateTime в таблице -> DateEntered.
РЕДАКТИРОВАТЬ 2 - Разъяснение вопроса И некоторые примеры данных.
Я попробовал предложенные решения, и мне не повезло. Поэтому я предоставлю некоторые примеры данных, чтобы понять, поможет ли это прояснить мой вопрос.
ID State UserName DateAdded
1 Connected Foo 1/1/2000 12:00
2 Connected Bar 1/1/2000 12:01
3 ScreenShot Foo 1/1/2000 12:05
4 LostConnection Foo 1/1/2000 12:06
5 Connected Joe 1/1/2000 12:10
6 LostConnection Joe 1/1/2000 12:15
7 Screenshot Bar 1/1/2000 12:16
8 Connected Jane 1/1/2000 12:22
Итак, глядя на это, люди, которые связаны (в настоящее время), это Бар и Джейн. Фу и Джо ушли. Также обратите внимание, что последнее действие Бар - снимок экрана, то есть его последнее действие не было состоянием LostConnection.
НТН.