首页 > 解决方案 > 使用主查询的字段计算子查询中的字段

问题描述

我正在尝试使用 SQL 计算产品的失效:

SELECT DISTINCT ID_NO, START_DT, END_DT, TERM_NO 
FROM DB1.TABLE1
ORDER BY ID_NO, START_DT;

当 ID 有第二个任期时,我想计算 LAPSE。这将是END_DT第 1 学期和START_DT第 2 学期之间的天数。

在此处输入图像描述

我可以在excel中轻松做到这一点。但我是编写任何高级 SQL 的新手。我可以得到一些方向或任何样本来实现这一目标吗?我试图谷歌,但我很难想出正确的搜索词组。

标签: sqloraclesubquery

解决方案


你可以用一个简单的左自连接来做到这一点:

select
  t.*, t.start_dt - tt.end_dt as lapse
from tablename t left join tablename tt
on tt.id_no = t.id_no and tt.term_no = 1 and t.term_no = 2 

您可以将ON条款更改为:

on tt.id_no = t.id_no and t.term_no - tt.term_no = 1

如果列中还有其他值,termo_no例如1, 2, 3, 4....

请参阅演示
结果:

ID_NO    | START_DT  | END_DT    | TERM_NO | LAPSE
:------- | :-------- | :-------- | ------: | ----:
48965787 | 13-DEC-17 | 13-DEC-18 |       1 |  
48965787 | 30-DEC-18 | 13-DEC-19 |       2 |    17
57896248 | 17-JAN-18 | 17-JAN-19 |       1 |  
57896248 | 17-JAN-19 | 17-JAN-20 |       2 |     0
78515698 | 16-JUN-18 | 16-JUN-19 |       1 |  
78515698 | 01-AUG-19 | 16-JUN-20 |       2 |    46

推荐阅读