[英]Teradata: Query the next lowest value of two columns for a given input
我有以下两个表:
TableA:
+---------+--------+
| name | nm_key |
+---------+--------+
| Bob | 1124 |
| Sally | 3278 |
| Frank | 6484 |
| Mary | 1125 |
| Annette | 2798 |
+---------+--------+
TableB:
+--------+----------+--------+
| nm_key | sequence | status |
+--------+----------+--------+
| 1124 | 33333 | 3 |
| 2798 | 11111 | 1 |
| 3278 | 12226 | 2 |
| 1125 | 24356 | 3 |
| 6484 | 12272 | 2 |
+--------+----------+--------+
使用这两个表,我如何编写Teradata SQL查询,该查询将返回名称输入的第二低状态和第二最低顺序的名称? 例如,Bob的输入将返回Frank,因为下一个最低状态是2,下一个最低顺序是12272。
让我们只关注这里的num_key
和表b
。 名称来自加入结果。 一种方法是相关子查询。 以下获取密钥
select b.*,
(select top 1 b2.nm_key
from b b2
where b2.status < b.status
order by b2.status desc, b2.sequence desc
) as prev_nm_key
from b;
限制为“鲍勃”并获得名称是对逻辑的较小调整。
编辑:
那是一个痛苦的局限。 这是一种解决方法:
select bb.*, b.nm_key
from (select b.*,
(select max(b2.status || ':' || b2.sequence) as statseq
from b b2
where b2.status < b.status
order by b2.status desc, b2.sequence desc
) as prev_nm_key
from b
) bb join
b
on (b.status || ':' || b.sequence) = bb.statseq;
尝试这个:
Select * from table1
Left join table2 on table2.nm_key=table1.nm_key
Where status=ceil(status +.99)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.