Я пытаюсь создать простую базу данных, которая отслеживает любые изменения атрибута местоположения пользователей. Каждый день я генерирую текущую информацию о пользователе, дату, местоположение и загружаю во временную таблицу на сервере sql. Я пытаюсь выяснить правильный sql для запроса для новых пользователей, измененных пользователей и удаленных пользователей.Добавление ежедневных изменений в таблицу базы данных
Поиск новых пользователей легко с:
SELECT table1.UserGuid,table1.Location
FROM table1
WHERE table1.UserGuid NOT IN
(
SELECT DISTINCT table2.UserGuid
FROM table2
)
Проблема Я имею в поиске измененных мест и удаленных пользователей.
Для измененных пользователей я пытаюсь вернуть пользователей, где их последнее местоположение в базе данных не соответствует текущему местоположению в ежедневной базе данных temp. Это то, что я имею, но я не думаю, что это правильно:
SELECT table1.UserGuid,table1.Location
FROM table1
WHERE EXISTS
(
SELECT TOP 1 table2.UserGuid,table2.Location
FROM table2
WHERE (table2.UserGuid = table1.UserGuid) AND (table2.Location != table1.Location)
ORDER BY table2.Date DESC
)
Для удаленных пользователей, я пытаюсь следующий SQL, чтобы определить, какие пользователи в основной таблице, которая не существует в ежедневной темп таблицы и не имеют места для удаления. (Если это возвращает удаленные пользователь, то я добавляю их в основную таблицу с местоположением удалено, чтобы они не вернулись в следующий раз)
SELECT table2.UserGuid,table2.Location
FROM table2
WHERE table2.UserGuid NOT IN
(
SELECT UserGuid
FROM table1
)
AND table2.Location != 'deleted'
после я бегом всех 3 запросов, чтобы найти добавляет, модификацию и удаления Я добавляю их в основной стол вместе с текущей датой и повторяю на следующий день. Таким образом, в основной таблице есть 3 столбца (UserGuid, Date, Location), а новые строки добавляются каждый день с измененной информацией. Пока мой новый пользовательский sql - единственный, который работает надежно. Есть ли более простой способ сделать это?
Каким образом ваши второй и третий запросы не соответствуют вашим ожиданиям? – Melanie
Для местоположений, возможно ли, чтобы местоположение было NULL (и UserGuid не было NULL)? Либо в новых результатах, либо в старых результатах? –
Я думаю, что моя главная проблема заключается в том, что в случае удаления и изменения местоположения мне нужно только посмотреть на самое последнее место для пользовательского руководства ... пользовательский указатель может появляться много раз в главной таблице по мере изменения их местоположения (и, возможно, изменения в предыдущем месте). его невозможно, чтобы пользовательский указатель или местоположение были нулевыми ... если userguid существует в ежедневной таблице, он будет иметь местоположение. Мне также нужно обработать случай, когда пользователь был ранее удален, а затем снова появляется в ежедневной таблице через некоторое время ... – NoThanks