删除一个字段的副本 - 分组依据和排序依据

时间:2016-05-30 05:44:05

标签: mysql sql

我有每个产品ID和日期存储在表格中的一些商品的每日价格。如果它与之前相同,我想删除更新的价格记录。或者从旧版本移动到更新版本,如果该产品ID的下一条记录具有相同的价格,我想删除它。我的主键包括所有三个字段,所以在这里使用不多。

这是我的表结构。

productID  Price    Rdate                  #
1           210     2015-05-01             1
2           55      2015-05-01             2
3           9       2015-05-01             3             
1           211     2015-05-02             4
2           53      2015-05-02             5
1           211     2015-05-04             6
1           210     2015-05-05             7
1           211     2015-05-08             8

productID - INT(外键)

价格 - SMALLINT(未签名)

Rdate - DATE

编辑:在这个例子中,我想删除#6(但不是#8),因为价格与前一个日期相同。我想删除#6,因为价格记录在前一个日期也是如此,所以保留两个条目是没有意义的。我只想记录价格变化" ,而不是每天的价格。

是否可以使用单个查询删除它?即使我必须循环查询每个ID,它也没关系。

2 个答案:

答案 0 :(得分:2)

假设您的表名为Item

DELETE 
FROM Item i 
WHERE EXISTS(
    SELECT * 
    FROM Item 
    WHERE 
        productID = i.productID 
        AND PRICE = i.PRICE 
        AND Rdate < i.Rdate
)

答案 1 :(得分:0)

试试这个;)

delete a
from yourtable a
inner join yourtable b on a.productID = b.productID and a.Price = b.Price and a.Rdate > b.Rdate