我有以下查询,目前正在按预期工作。它将我的表连接到自己的表中,以便识别状态发生更改的记录。
from
(select
ROW_NUMBER() OVER(order by OBJECTID, GDB_TO_DATE DESC) as R_NUM,
OBJECTID,
STATUS,
GDB_TO_DATE
from updm.pipes_h
) r1
join
(select
ROW_NUMBER() OVER(order by OBJECTID, GDB_TO_DATE DESC) as R_NUM,
OBJECTID,
STATUS,
GDB_TO_DATE
from updm.pipes_h
) r2 on r1.R_NUM = r2.R_NUM+1
where r1.objectid = r2.objectid
and r1.status != r2.status;
但是,我正在尝试添加一个额外的连接,以获取另一个表中的更多信息。我想把这个连接放在我的r1表中,就像这样:
select *
from
(select
ROW_NUMBER() OVER(order by p.OBJECTID, p.GDB_TO_DATE DESC) as R_NUM,
p.OBJECTID,
p.STATUS,
p.GDB_TO_DATE,
ps.PRESSURESYSTEMNAME
from updm.pipes_h p
join updm.pressuresystem ps ON p.PRESSURESYSTEM_GLOBALID = ps.globalid
) r1
join ...
问题是,如果我这样做,查询将返回错误的结果。我不确定这里出了什么问题,尽管我怀疑是r1中的row\u number()函数。我尝试使用p.row\u number(),但这也不是正确的语法。有人能建议吗?我试着查找row\u number()的示例,但没有找到与join一起使用的示例。
1条答案
按热度按时间u3r8eeie1#
你原来的查询是过于复杂的事情。只是使用
lag()
(或lead()
):如果你想多带一张table,你必须小心;您的解释表明,当前表和新表之间没有1-1关系:因此原始表中的行很可能被复制或逐出,这会改变window函数运行时的分区。加入外部查询可能更简单: