引用其他表来检查日期范围内的记录

时间:2017-11-06 20:47:45

标签: mysql sas proc-sql

我正在处理一系列交易和库存收据。我的目标是创建一个标记,以查看交易前最多5天是否公司收到该项目的货物装运。伪逻辑如下:

For each transaction date: 
   For all inventory receipts whether inventory.item# = transaction.item#
       Are there records between transaction date - 5 and transaction date?

通常,我只会创建两个表并加入它们,但它们实际上是两个独立的数据结构。我的初步尝试:

PROC SQL;
   Create Table TABLE 1 AS 
         SELECT TRANSACTION.DATE, 
                SUM(CASE WHEN INVENTORY.DATE BETWEEN (TRANSACTION.DATE - 5 AND TRANSACTION.DATE) AND INVENTORY.ITEM = TRANSACTION.ITEM;

但我如何参考表格?我不确定左/右/内连接是否合适。我不是真的想加入桌子,是吗?

编辑: 我的数据结构如下:

TRANSACTION TABLE 

ITEM DATE
0012 12/2
0231 12/3
0421 12/3 

INVENTORY TABLE 

0012 11/30
0231 12/4
0421 12/1

对于ITEM 0012,我们会查看库存表,看到11/30处有该物品的收据,因此这将是flag = 1.对于项目0231,我们发现其中没有库存配方五天的交易,所以flag = 0。

1 个答案:

答案 0 :(得分:1)

标准SQL查询在这里适合我,不知道为什么你觉得标准连接不起作用。鉴于您已经布局的结构,它的工作原理以及您的样本数据。如果你有重复的日期和项目,我不知道它是如何工作的,但你没有在你的问题中包含它,我必须假设你的样本数据反映了你的实际情况。

假设,表名是t1和t2:

proc sql;
create table want as
select t1.*, t2.date as date2, 
    case when not missing(t2.date)  then 1 
            else 0 
     end as check_flag
from t1 as t1
left join t2 as t2
    on t1.item=t2.item
    and t2.date between t1.date-5 and t1.date;
quit;