Hikedaya
We rise up for the things we believe in over and over again
По большей части эта запись для себя самого, чтобы банально не забыть правило, которое вывел для себя. А звучит оно просто - всегда два поля, одно аггрегирующее, второе вычисляемое.
Это про вот такую конструкцию:

И как работает.
Есть таблица принтеров, где показано, какой принтер когда и куда был поставлен. В этой таблице можно отследить все перемещения данного конкретного принтера. И из этой же таблицы можно актуальный список установленных на данный момент принтеров. То есть для каждого принтера нужно получить самую свежую строку.
Разбор начинаем с собственно Inner Join. Из таблицы Log выбираем два поля, MAC-адрес (так как именно он является однозначным идентификатором каждого принтера) и дату установки. Группируем выборку по этому самому адресу. Если бы это делалось в Powershell, можно было бы указать примерно так:
... | select MAC,Date | group Date
А на выходе получили бы следующее:

В SQL такое не прокатит, но и не надо. Вот тут-то и пригодится вышеозначенное правило. Аггрегировали мы по полю MAC, а дату - вычислим. В качестве вычисления будет функция, возвращающая максимальное значение из всей полученной выборки.

Ну а после того, как получили рабочий Join, навешиваем на него остальные данные, которые нам выбирает первый Select. В качестве связи между двумя таблицами будет одновременное выполнение двух условий: MAC из первого Select должен быть равен MAC из Join, Дата из первого Select должна быть равна полю Time_Stamp из Join.

Все это в сумме дает по одной строке на каждый MAC, то есть, на каждый принтер. Что и требовалось.

Черт, давно же с базами данных (пусть даже это всего лишь MS ахсекс Access) не приходилось работать. Но если все получится - наконец-то избавимся от бардака в информации о всех принтерах, какие только есть.

@музыка: David Arkenstone - Spirit Wind

@настроение: клац-клац-клац...