sql - oracle加入一对多关系,返回第一个加入日期

标签 sql oracle join one-to-many

我正在尝试加入两张 table ,其中一个人可以拥有不止一张卡,其中一些可能会被取消。

例如:

**Customer Card**
Cust ID | Cust Acct | Card No | Join Date | Cancel Date
1       | 10001     | E100001 | 20150501  | 20160101
1       | 10001     | E100002 | 20151001  | 0
2       | 10002     | E100003 | 20150101  | 20160601
3       | 10003     | E100004 | 20150201  | 0
4       | 10003     | E100005 | 20160101  | 0 

**Customer Account**
Cust ID | Cust Acct 
1       | 10001     
2       | 10002     
3       | 10003 

基本上,我想显示带有第一个加入卡号的所有帐户,即使卡已被取消。如果第一张卡被取消,则需要显示第二张卡的加入日期。

预期结果:

Cust ID | Cust Acct | Card No | Join Date | Cancel Date
1       | 10001     | E100002 | 20151001  | 0
2       | 10002     | E100003 | 20151001  | 20160601
3       | 10003     | E100004 | 20150201  | 0

感谢您的帮助!有什么想法吗?

最佳答案

一种方法使用row_number():

select cc.*, ca.CardNo, ca.JoinDate, ca.CancelDate
from customercard cc join
     (select ca.*, 
             row_number() over (partition by custid order by joindate asc) as seqnum
      from customeraccount ca
     ) ca
     on cc.custid = ca.custid and seqnum = 1;

关于sql - oracle加入一对多关系,返回第一个加入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40173045/

相关文章:

oracle - Oracle NLS 设置中的 session 与实例与数据库

regex - 正则表达式可以将/01/02/007/…转换为01/02,将01转换为01/NA-可以吗?

java - 为什么我们创建新线程并使用 join() 让父线程等待?

mysql - 如何使用linq命令选择此数据

mysql - SQL Join 用于检索单个用户的记录

mysql - 我可以追溯添加外键 ID 列并用另一个表的主键的值填充它,而无需手动输入吗?

mysql - Doctrine2 选择生日范围

sql - 克隆一条记录,然后使用它的自动递增 id 进行进一步的操作

php - 如何根据id合并两个MySQL表

json - HIVE中将JSON格式String转成数组