2014-03-26 123 views
0

我有一張客戶信息表,我需要從不同的國家,但只有在時間戳比最後一次檢查更新。不同的值也需要與所有的舊支票不同。只選擇新的沒有重複值

表:

Name   City   State   created_at 
Dan   Springfield  Ohio   2014-03-25 17:44:19.000000 
Jon   Philadelphia Pennsylvania 2014-03-25 17:44:19.000000 
Sue   Hollywood  California  2014-03-25 17:44:19.000000 
Ann   Oxford   Ohio   2014-03-25 19:44:19.000000 
Al   Chicago   Illinois  2014-03-25 19:44:19.000000 

所以說,我已經跑了一次檢查,結果發現俄亥俄州,賓夕法尼亞州和加利福尼亞州。然後添加了兩個新條目。下一次我運行支票時,我只需要找到伊利諾伊而不是俄亥俄州。

我想這一點,

SELECT State, created_at FROM (SELECT DISTINCT State, created_at FROM clients) as temp WHERE created_at > '2014-03-25 17:44:19.000000' ORDER BY State ASC 

運行在此之後,我意識到我的思維過程是錯誤的就這一個,因爲我仍然得到重複。

我想我需要的是,找到所有新項目

Select State FROM clients WHERE created_at > '2014-03-25 17:44:19.000000' 

那麼該結果,

選擇狀態FROM的結果,其中國家是不是在(客戶WHERE created_at <「2014- 03-25 17:44:19.000000')

但我不知道如何做到這一點。

感謝您的任何幫助。

回答

0

如果自上次檢查後發生了某種情況,則min(created_at)將在最後一次檢查日期之後。因此,下面應該做你想要的:

select c.state 
from clients c 
group by state 
having min(created_at) >= @yourlastcheck; 
+0

是的,這是完美的工作。謝謝。 有沒有機會解釋c部分?我沒有遵循「c」實際上正在做的事情。 – NarayanJr

+0

@ user3462055。 。 。 'c'被稱爲「表別名」。它是表名的縮寫。在這種情況下,它是可選的,但有時(特別是對於自連接),它可能是必要的。 –