我有'order_history‘和'current_order’表都有类似的列,如下所述: order_name、Consumer_name、order_date、Order_ as
每次我得到新的订单时,我必须找出重叠的订单,从历史表中删除重复的订单,然后追加current_table数据,但是现在情况更糟了,因为我的日期在当前表中被更改了,所以在比较order_date时必须考虑+/- 14天,然后从历史表中删除它,请参阅示例表数据。
-目前的命令
order_name| Consumer_name| order_date|order_amount
羊毛/ Jhon 6/15/2017
2017年7月14日#^#^
羊毛/J号/8/13/2017
-秩序历史
order_name| Consumer_name| order_date _ order_amount
羊毛/ Jhon 5/15/2017
羊毛/ Jhon 6/10/2017
羊毛/J号/ 7/8/2017
在上面的场景中,我需要从历史表中删除6月份和7月份( 6/10/2017和7/8/2017)的订单行,然后将当前的订单表条目追加到历史表中。
我正在使用下面的查询
select a.order_name, a.consumer_name, a.order_date , a.order_amount
from order_history a inner join current_order b
on ( upper(a.order_name) = upper(b.order_name) and
upper(a.consumer_name) = upper(b.consumer_name))
where
upper(a.order_name) = upper(b.order_name) and
upper(a.consumer_name) = upper(b.consumer_name)
and a.order_date -b.order_date <= 14 and a.order_date -b.order_date >= -14但是我得到了重复的行
你能帮我解决这个问题吗。一种解决方案可以是笛卡尔产品,其中每一行将与另一表的所有行进行比较,但由于数据大小为百万行,此查询将花费大量时间。
发布于 2017-07-12 13:35:09
使用ABS作为正数得到日期之间的差额。如果您只是想从历史表中删除,请使用EXISTS查找当前的orders表。
delete
from order_history h
where exists
(
select *
from current_order c
where c.order_name = h.order_name
and c.consumer_name = h.consumer_name
and abs(c.order_date - h.order_date) <= 14
);https://stackoverflow.com/questions/45058870
复制相似问题