簡體   English   中英

MySQL查詢基於時間戳的一部分刪除重復項

[英]Mysql query to delete duplicates based on part of timestamp

我有一個網上商店,由於Paypal發送一些付款通知兩次甚至3-4-5次,兩次通知之間有隨機間隔,從幾秒到幾分鍾不等,因此得到了一些重復的訂單。

我的訂單表中的示例:

ID     productname    buyer    timestamp
1      apples         john     2014-07-01 19:22:20
2      bananas        john     2014-07-01 19:22:20
3      oranges        mary     2014-07-01 19:22:52
4      apples         john     2014-07-01 19:22:53
5      bananas        john     2014-07-01 19:22:53
6      apples         chris    2014-07-01 19:22:54

我要刪除所有重復的行,重復是指產品名稱,買方和購買日期應該相等。 (僅日期,而不是時間戳記的時間部分)

因此,在上表中,應將其刪除:

4      apples         john     2014-07-01 19:22:53
5      bananas        john     2014-07-01 19:22:53

因為他在同一天早些時候買了同樣的東西。

您將如何去做?

你可以用EXISTS來做

DELETE FROM table AS t
WHERE EXISTS(
    SELECT * 
    FROM table 
    WHERE id != t.id 
        AND productname = t.productname 
        AND buyer = t.buyer 
        AND DATE(timestamp) = DATE(t.timestamp))

這是另一個類似的問題 真正的原因是使id成為唯一的鍵字段,以便您一開始就不能插入重復項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM