【发布时间】:2021-11-12 11:07:39
【问题描述】:
归结为最简单的术语,我有一个表格的两列表: |PK|序列|
PK 值是域密钥。 SEQ 列表示上游系统提供给我的序列号。不幸的是,上游系统偶尔会错过一个序列项目。例如,我可能会看到:
|PK|序列| |a|0| |一个|1| |a|3|
所以对于域键值 a,我“缺少”序列号 2。 这是我在 Oracle 中第一次尝试 SQL(假设我已经正确转置)。
但它在 Teradata 中不起作用。我收到错误 3807,对象 e1 不存在。
SELECT
e1.pk,
e1.seq,
e2.seq
FROM
my_table e1,
my_table e2
WHERE
e1.pk = e2.pk
AND e2.seq = (
SELECT
ehash
FROM
(
SELECT
e3.pk ,
MIN(e3.seq) AS ehash
FROM
my_table e3
WHERE
1 = 1
AND e3.pk = e1.pk
and e3.seq > e1.seq
group by e3.pk having min(e3.seq) > e1.seq
)
)
and e2.seq -1 > e1.seq
我认为我的名称范围不正确,但我无法弄清楚。
可能有 OLAP 或其他功能可以帮助我,但我不熟悉它们。因此,如果有更好的方法来满足我的要求,请提出来。
谢谢。
【问题讨论】:
-
我认为您不能在相关子查询内的派生表中引用您的 e1 表。不是解决方案,但这就是您收到错误的原因。
-
谢谢,是的,这在某种程度上可以解释它。当然,令人失望。但至少这可以阻止我用头撞墙。
标签: sequence teradata self-join