【发布时间】:2020-12-12 09:35:23
【问题描述】:
我有一个名为 tracking_history 的表。在此表中将存储包裹跟踪历史记录。由于某些原因,当 checkTrackStatus 函数执行时,所有现有的跟踪状态都在表中重复插入。这是跟踪状态序列。 'ACCEPTED','AT_SENDING_DEPOT','ON_THE_ROAD','AT_DELIVERY_DEPOT','DELIVERED'
我也在该表中保存了跟踪 ID 和订单 ID。因此,我需要为每个订单 ID 提供最新的跟踪状态 ('ACCEPTED','AT_SENDING_DEPOT','ON_THE_ROAD','AT_DELIVERY_DEPOT','DELIVERED'),并且应该删除剩余的重复值。我尝试了以下查询。
`DELETE t1 FROM tracking_history t1, tracking_history t2
WHERE t1.id < t2.id AND t1.order_id = t2.order_id`
但此查询仅保留最新记录并删除其余所有记录。
Means I am having all orders ids with DELIVERED Status only. 如何通过保持最新状态来删除重复状态?任何帮助将不胜感激。
【问题讨论】:
-
你可以试试
AND t1.status = t2.status吗?您是否确保不再将重复项输入数据库? -
你的 MySQL 版本是多少?向我们展示
SHOW CREATE TABLE tracking_history\G的输出。 -
@El_Vanja ,谢谢。它按预期工作。
-
样本数据和期望的结果会有所帮助。在现实世界中,一个包可能会多次经历相同的状态,因此您需要非常小心这个问题。
标签: php mysql sql inner-join sql-delete