我想建立一个简单的数据库,用于跟踪的任何更改到用户的位置属性。每天我生成用户,日期,位置的当前信息并上传到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,日期,位置),并且每天都会添加新行,并更改信息。到目前为止,我的新用户sql是唯一可靠工作的。有没有更简单的方法来做到这一点?
在哪些方面你的第二个和第三个查询不符合您的期望? – Melanie 2013-03-21 21:09:34
对于位置,位置是否可能为NULL(并且UserGuid不是NULL)?无论是在新的结果还是旧的结果? – 2013-03-21 21:10:49
我认为我的主要问题是,在删除和位置更改的情况下,我只需要查看用户guid的最近位置...用户guid可能会随着其位置更改而出现在主表中多次(并可能改回到以前的位置)。它不可能为用户guid或位置为空...如果userguid存在于每日表中它将有一个位置。我还需要处理这种情况,如果用户以前被删除,但随后在日常表格中重新出现...... – NoThanks 2013-03-22 13:37:02