从两个 table 获取匹配数据,其中日期与日期范围 postgres 进行比较

getting matching data from two table where date is compared with date range postgres

我有 'order_history' 和 'current_order' table 都有类似的列,如下所述: order_name, Consumer_name, order_date , 订单金额

每次我收到新订单时,我都必须找出重叠的订单并从历史记录中删除重复的订单 table,然后添加 current_table 数据,但现在情况最糟,因为我的约会对象越来越在当前 table 中发生了变化,所以我在比较 order_date 时必须考虑 +/- 14 天,然后将其从历史记录中删除 table 请查看示例 table 数据

---当前订单
order_name| Consumer_name| order_date|order_amount
羊毛 |约翰 | 2017/6/15| 500
羊毛 |约翰 | 2017 年 7 月 14 日| 1000
羊毛 |约翰 | 2017 年 8 月 13 日| 800

---订单历史
order_name| Consumer_name| order_date | order_amount
羊毛 |约翰 | 2017 年 5 月 15 日 | 1200
羊毛 |约翰 | 2017 年 6 月 10 日 | 500
羊毛 |约翰 | 2017 年 7 月 8 日 | 800

在上述情况下,我需要从历史记录中删除 6 月和 7 月(2017 年 6 月 10 日和 2017 年 7 月 8 日)的订单行 table,然后需要追加当前订单 table 历史条目 table.

我正在使用以下查询

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

但是我得到了重复的行

你能帮我解决这个问题吗?一个解决方案可以是笛卡尔积,其中每一行将与另一行的所有行进行比较 table 但由于数据大小为百万行,此查询将花费大量时间

使用ABS 得到日期之间的差值作为正数。如果您只想从历史记录中删除 table,请使用 EXISTS 查找当前订单 table.

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
);