2017-09-25 42 views
0

RUNFILE表比較它給刪除最近行:我需要與最近的時間戳刪除的行有沒有辦法通過使用時間戳

Sample_Id Created_On 
filename.csv 09/25/2017 16:17:33 
filename.csv 09/25/2017 16:10:33 

該查詢給出了舊記錄。

SELECT min(RunFile.`Created_On`) FROM RunFile WHERE Sample_Id='filename.csv' 

我想類似下面,但它不是按預期工作:

DELETE From RunFile WHERE RunFile.`Created_On` IN (SELECT min(RunFile.`Created_On`) FROM RunFile WHERE Sample_Id='filename.csv') 

任何人都可以請幫我如何刪除基於時間戳的舊紀錄。

回答

2

可以ORDER BY和限制在刪除查詢:

DELETE FROM RunFile WHERE Sample_Id = 'filename.csv' ORDER BY Created_On DESC LIMIT 1 

我強烈建議改變Created_On列於日期時間具有格式 'Y-M-d H:我:s' 或時間戳。以當前字符串格式排序不會按照您的預期工作。 10/25/2016大於09/25/2017。

+0

謝謝您的回答。 Created_On列是Timestamp數據類型。在這種情況下,我不應該爲你提到的上述情況出現任何問題嗎? – nadish

2

你可以嘗試不MAX(Cre​​ated_On)刪除值sample_id

delete from RunFile 
where (Sample_Id, Created_On) not in (

    select * from (

    select Sample_Id, max(Created_On) 
    from RunFile 
    group by sample_id) t 

) 
and Sample_Id = 'filename.csv' 
+0

這是怎麼回事upvoted?首先,子查詢沒有'from'。其次,如果是這樣,它在MySQL中將不起作用。 (我可以理解答案和錯過「from」的「錯字」;這是困擾我的upvotes。) –

+0

謝謝.. @ GordonLinoff錯過了添加.. – scaisEdge

+0

。 。答案仍然不正確,因爲您不能在刪除中的子查詢中引用正在修改的表。 –

相關問題