我想建立一個簡單的數據庫,用於跟蹤的任何更改到用戶的位置屬性。每天我生成用戶,日期,位置的當前信息並上傳到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