2014-04-03 41 views
0

我有出現如下表:SQL訪問 - 保持記錄只與最近的時間戳

Time Name Cust_ID Num_Calls Num_Orders 

12.00 ABC  100  20   10 

12.25 PQR  102  23   12 

12.30 ABC  100  26   15 

01.00 ABC  100  26   18 

02.00 PQR  102  23   14 

04.00 PQR  102  25   20 

如何刪除早期的記載每個「名稱& CUST_ID」,並保持最新的一個。當我通過Access數據庫運行它時,記錄中的其他字段可能會更改,但名稱和ID保持不變。

我在一天結束的輸出應該是:

Time Name Cust_ID Num_Calls Num_Orders 

01.00 ABC  100  26   18 

04.00 PQR  102  25   20 
+0

難道這些表有一個ID列? – paqogomez

+2

如何區分AM和PM在列時間? –

+0

是的表有一個正常的參考ID列,它像一個序列號。 – user3495451

回答

0

我認爲,如果你的cust_id是獨一無二的,你應該讓它在表的主鍵。 然後,每當你有一個新的條目,首先檢查,看看目前的cust_id是否已經存在。 如果是,請更新表中的該條目。 否則做一個插入。

+0

我很新的SQL訪問編程,如果你可以幫我一個示例代碼,會很好 – user3495451

+0

IF EXISTS(SELECT * FROM YourTable WHERE Cust_ID ='SomeValue' ) UPDATE YourTable SET(...)WHERE Cust_ID ='SomeValue' ELSE INSERT INTO YourTable VALUES(...) – jianweichuah

0

嘗試......

這應該給你最近的記錄基於max(time),你可以刪除該組的補充。

SELECT * FROM YOUR_TABLE A 
INNER JOIN 
(SELECT MAX(time) MAX_time 
, NAME , CUST_ID 
FROM YOUR_TABLE 
GROUP BY 
NAME , CUST_ID)B 
ON A.NAME=B.Name 
and A.CUST_ID=B.CUst_ID 
and A.time =B.max_time 

所以,你會刪除下列記錄

DELETE FROM YOUR_TABLE 
WHERE EXISTS 
(SELECT * FROM YOUR_TABLE B 
WHERE TIME <>(SELECT MAX(time) FROM YOUR_TABLE C WHERE B.NAME=C.Name 
and C.CUST_ID=B.CUst_ID) 
AND A.NAME=B.Name 
and A.CUST_ID=B.CUst_ID) 
+0

有趣...我從來沒有試過在MS Access中使用CTE。 – attila

+0

我很懷疑Access支持CTE。 – paqogomez

+0

我的不好。將其更改爲子查詢。 – SoulTrain