У меня есть таблица событий входа, поступающих из Active Directory. Одним из типов этих событий являются машинные входы, которые включают в себя IP-адрес машины, выполняющей вход в систему. Это удобно, поскольку он обеспечивает временный способ определения того, какая машина была на каком IP-адресе в данный момент времени. Я пытаюсь построить запрос, который даст мне timestamped список того, когда машина впервые выполнила вход в 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
Я уверен, что эти два может быть объединена в единый внучатый-запрос. Возможно ли это, или я должен придерживаться логики приложения, чтобы обеспечить то, что я ищу?
Подстановка «min» для «max» дает мне то, что мне нужно. Хотя метод min/max даст мне КАК ДОЛГО, он был на этом IP, что также полезно в другой области. Время выполнения этого парня находится на одном уровне с возвращением 2000 строк. НО ... это дает правильный выход! – sysadmin1138
О да, MIN, ой, извините! –