首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个表中获取匹配数据,其中日期与日期范围比较postgres

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

Stack Overflow用户
提问于 2017-07-12 13:20:47
回答 1查看 79关注 0票数 0

我有'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)的订单行,然后将当前的订单表条目追加到历史表中。

我正在使用下面的查询

代码语言:javascript
复制
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

但是我得到了重复的行

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 13:35:09

使用ABS作为正数得到日期之间的差额。如果您只是想从历史表中删除,请使用EXISTS查找当前的orders表。

代码语言:javascript
复制
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
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45058870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档