我正在尝试构建一个简单的数据库来跟踪用户位置属性的任何更改。每天我都会生成用户、日期、位置的当前信息并上传到 sql server 中的临时表。我试图找出正确的 sql 来查询新用户、修改用户和删除用户。
寻找新用户很容易:
SELECT table1.UserGuid,table1.Location
FROM table1
WHERE table1.UserGuid NOT IN
(
SELECT DISTINCT table2.UserGuid
FROM table2
)
我遇到的问题是查找修改过的位置和删除的用户。
对于修改后的用户,我试图返回他们在数据库中的最后一个位置与日常临时数据库中的当前位置不匹配的用户。这就是我所拥有的,但我认为它不正确:
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 是唯一可靠工作的。有没有更简单的方法来做到这一点?