从两个 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
);
我有 '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
);