У меня есть таблица событий входа в систему из Active Directory.Одним из типов этих событий являются входы в систему компьютера, которые включают IP-адрес компьютера, выполняющего вход в систему.Это удобно, так как предоставляет метку времени для определения того, какой компьютер находился на каком IP в данный момент времени.Я пытаюсь создать запрос, который даст мне временную метку списка, когда машина впервые вошла в IP (спасибо DHCP, IP-адрес является переменным).
Запрос, который просто возвращает список, если IP-адреса, которые имелись на машине, прост.
SELECT DISTINCT IP
FROM EventStream
WHERE (Machine='$Machine')
Я знаю, что «выбрать отличный» - это неоптимальный запрос, поэтому яищу что-то получше.Это, вероятно, включает в себя подзапросы, о которых я знаю очень мало.Если не указать «Distinct», в этом случае возвращается таблица, содержащая до 2000 строк, поэтому большая часть данных отбирается и не используется.
Что мне действительно нужно, так это какой-то способ сформулировать запрос так, чтобыЯ получаю список с отметкой времени, когда машина впервые появилась на IP-адресе.Я могу подделать его в коде, повторяя этот запрос по результатам первого:
SELECT TOP 1 DateTime
FROM EventStream
WHERE (Machine='$Machine' and IP='$IP')
ORDER BY DateTime
Я почти уверен, что эти два можно объединить в общий унифицированный запрос.Возможно ли это, или я должен придерживаться логики приложения, чтобы обеспечить то, что я ищу?