我有每个产品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,它也没关系。
答案 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