Mysql查询根据时间戳的一部分删除重复项

时间:2014-07-01 17:33:30

标签: mysql

我有一个网店,由于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

因为他在同一天早些时候买了同样的东西。

你会怎么做呢?

2 个答案:

答案 0 :(得分:1)

您可以使用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))

答案 1 :(得分:0)

Here is another similar question。它真正归结为使id成为一个唯一的关键字段,以便您无法在第一时间插入重复字段。