Mysql 参照其他表格检查日期范围内的记录

Mysql 参照其他表格检查日期范围内的记录,mysql,sas,proc-sql,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? TRANSACTIO

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

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

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

INVENTORY TABLE 

0012 11/30
0231 12/4
0421 12/1
通常,我只会创建两个表并将它们连接起来,但它们实际上是两个独立的数据结构。我最初的尝试是:

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;
但我如何参考表格呢?我不确定左/右/内联接在这里是否合适。我并不是真的想加入这些行列,是吗

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

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

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

INVENTORY TABLE 

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

对于0012项,我们将查看库存表,并看到该项在11月30日有一张收据,因此标志=1。对于0231项,我们发现在交易的五天内没有库存配方,因此flag=0

标准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;

发布样本输入数据和预期输出数据。不清楚你想要什么作为输出,在SAS中,你可以很容易地做一个自我连接,没有一个子查询。要考虑的事情——你的数据是如何结构化的,特别是那个日期字段,如果你每天有多条记录。@ ReeZa增加了数据结构。