Sql 如何基于某些条件连接两个表?
我有两张桌子:Sql 如何基于某些条件连接两个表?,sql,join,sas,Sql,Join,Sas,我有两张桌子: Customer\u Master 列-客户id、出生日期 表中有100行 成为成员的日期 列-成为成员的日期 表中有1000行重复 这两个表没有任何公用键 现在我想把这两个表连接起来,表2中的日期将 有6000天。在加入期间,如果发现6000天的间隔,则应停止当前客户id的过程 我正在尝试下面的代码,但没有得到想要的输出 select a.*, b.Date_became_member from Customer_Master as a ,Date_became_me
Customer\u Master
列-客户id、出生日期
表中有100行成为成员的日期
列-成为成员的日期
表中有1000行重复select a.*, b.Date_became_member
from Customer_Master as a
,Date_became_member as b
where b.Date_became_member - a.Date_of_birth = 6000
我使用的是SAS\SQL。我的目标是模拟数据。为此,我使用随机日期创建了上面的表。现在我想用某个随机日期标记客户成为成员的日期。但条件是,在出生日期和成为成员日期之间至少应有16年的间隔
Table 1 - Customer_Master
cust_id date_of_birth
10013 1970/02/21
10015 1989/11/14
10016 1979/02/05
10017 1986/05/26
Table 2 - Date_became_member
Date_became_member
1986/03/25
1992/11/21
1994/01/24
1998/11/21
2004/01/24
2001/08/25
1995/07/07
1979/02/21
1997/06/07
2005/02/21
2006/09/11
Desired output
cust_id date_of_birth Date_became_member
10013 1970/02/21 1986/03/25
10015 1989/11/14 2006/09/11
10016 1979/02/05 1995/07/07
10017 1986/05/26 2004/01/24
其逻辑是,从_的出生日期到_成为_成员的日期之间至少应该有16年的间隔,如果发现间隔为16年
从表2中的任何日期开始,应仅取该日期,而不是间隔16年或更长的任何其他日期。除非
日期成为成员
有一列链接到客户主文件中的一行或多行
,否则您无法有意义地加入它们。为了在具有明确连接的行之间建立连接,我们通常使用外键关系(有关更多信息,请参阅)
如果Date\u befored\u member
确实有一个cust\u id
列,如Customer\u Master
表,则您的查询如下所示:
SELECT cm.cust_id
, cm.date_of_birth
, dbm.Date_became_member
FROM Customer_Master AS cm
JOIN Date_became_member AS dbm
ON cm.cust_id = dbm.cust_id
WHERE dbm.Date_became_member - CM.Date_of_birth = 6000
如果在Date\u befored\u member
表中没有其他列,那么我建议它的实用性是非常有限的,重新设计很可能是正确的
如果您确实希望加入一个显示Customer\u Master
中的每一行,并加入到Date\u成为成员的每一行中,那么您需要一个交叉加入
:
SELECT cm.cust_id
, cm.date_of_birth
, dbm.Date_became_member
FROM Customer_Master AS cm
CROSS JOIN Date_became_member AS dbm
WHERE dbm.Date_became_member - CM.Date_of_birth = 6000
我想你问题的重点是如何找到符合你16岁要求的第一次约会。为此,您需要按客户对数据进行分组。要查找16年间隔,可以使用INTNX()
函数
proc sql ;
create table want as
select cust_id,dob,date_became_member
from customer_master
left join date_became_member
on date_became_member > intnx('year',dob,16,'same')
group by 1,2
having date_became_member= min(date_became_member)
;
quit;
对不起,我不明白你的问题。为什么要联接两个没有公共id的表。6000天是多少天?这已经超过16年了。您能给出表格中数据的示例以及您想要的输出吗?编辑您的问题并提供示例数据和所需结果。也,用您正在使用的数据库标记问题。我使用的是SAS\SQL。我的目标是模拟数据。为此,我使用随机日期创建了上面的表。现在,我想用某个随机日期标记客户成为成员的日期。但条件是出生日期和成为成员日期之间至少应有16年的间隔。再次:您的询问并添加一些样本数据以及基于该数据的预期输出。请发短信,