SQL 对 select 行的语句,其中前一行状态 = 'C' AS400
SQL Statement to select row where previous row status = 'C' AS400
运行 sql IBMI 系列 7
我有一个 table 用于存储有关订单的信息。每行都有一个订单号 (ON)、零件号 (PN) 和序列号 (SEQ)。每个 ON 将有多个 PN 链接到它们,每个零件号有多个 SEQ 号。每个序号代表在部件上进行工作的顺序。一旦零件位于某个位置并准备好对其进行处理,系统中的其他地方就会显示一个标志。我想要做的是获取尚未到达但已在先前位置关闭的位置的订单列表(这意味着该部分正在途中)。
我有一个下面列出的查询,我认为它应该有效,但我收到以下错误:"The column qualifier or table t undefined"。我的问题在哪里?
Select * From (SELECT M2ON as Order__Number , M2SEQ as Sequence__Number,
M2PN as Product__Number,ML2OQ as Order__Quantity
FROM M2P
WHERE M2pN in (select R1PN FROM R1P WHERE (RTWC = '7411') AND (R1SEQ = M2SEQ)
)
AND M2ON IN (SELECT M1ON FROM M1P WHERE ML1RCF = '')
ORDER BY ML2OSM ASC) as T
WHERE
T.Order__Number in (Select t3.m2on from (SELECT *
FROM(Select * from m2p
where m2on = t.Order__Number and m2pn = t.Product__Number
order by m2seq asc fetch first 2 rows only
)as t1 order by m2seq asc fetch first row only
) as t3 where t3.m2stat = 'C')
编辑 - 对其他有此问题的人的回答
Clutton 的回答稍作修改,因此感谢他的快速回复!我不得不命名我的外部 table 并在子查询中指定它,否则 as400 会反击并告诉我它找不到列。我还必须按序列号降序排序,以便我获取低于参数的最高记录(否则,例如,如果我的序列号是 20,它可以获取 5,即使 10 可用并且应该首先显示。这是我现在使用的子查询。请注意实际查询名称 m2p 为 T1。
IFNULL((
SELECT
M2STAT
FROM
M2P as M2P_1
WHERE
M2ON = T1.M2ON
AND M2SEQ < T1.M2SEQ
AND M2PN IN (select R1PN FROM R1P WHERE (RTWC = @WC) AND (R1SEQ = T1.M2SEQ))
ORDER BY M2SEQ DESC
FETCH FIRST ROW ONLY
), 'NULL') as PRIOR_M2STAT
刚刚看了你的问题,它看起来像我经常做的事情来模拟 RPG READPE 操作代码。是M2P的关键Order/Seq?如果是这样,这里有一个基本部分可以帮助您构建查询的其余部分。
我假设您正在尝试使用 SQL 通过密钥获取先前记录。在 RPG 中,这就像对具有 Order/Seq 键的文件的键进行 READPE。
下面是一个使用子查询获取先前记录的状态字段的示例。
SELECT
M2ON, M2PN, M2OQ, M2STAT,
IFNULL((
SELECT
M2STAT
FROM
M2P as M2P_1
WHERE
M2P_1.M2ON = M2ON
AND M2P_1.M2SEQ < M2SEQ
FETCH FIRST ROW ONLY
), '') as PRIOR_M2STAT
FROM
M2P
请注意,这会将子查询包装在 IFNULL
中以处理它是第一个序列号且不存在先前序列的情况。
运行 sql IBMI 系列 7
我有一个 table 用于存储有关订单的信息。每行都有一个订单号 (ON)、零件号 (PN) 和序列号 (SEQ)。每个 ON 将有多个 PN 链接到它们,每个零件号有多个 SEQ 号。每个序号代表在部件上进行工作的顺序。一旦零件位于某个位置并准备好对其进行处理,系统中的其他地方就会显示一个标志。我想要做的是获取尚未到达但已在先前位置关闭的位置的订单列表(这意味着该部分正在途中)。
我有一个下面列出的查询,我认为它应该有效,但我收到以下错误:"The column qualifier or table t undefined"。我的问题在哪里?
Select * From (SELECT M2ON as Order__Number , M2SEQ as Sequence__Number,
M2PN as Product__Number,ML2OQ as Order__Quantity
FROM M2P
WHERE M2pN in (select R1PN FROM R1P WHERE (RTWC = '7411') AND (R1SEQ = M2SEQ)
)
AND M2ON IN (SELECT M1ON FROM M1P WHERE ML1RCF = '')
ORDER BY ML2OSM ASC) as T
WHERE
T.Order__Number in (Select t3.m2on from (SELECT *
FROM(Select * from m2p
where m2on = t.Order__Number and m2pn = t.Product__Number
order by m2seq asc fetch first 2 rows only
)as t1 order by m2seq asc fetch first row only
) as t3 where t3.m2stat = 'C')
编辑 - 对其他有此问题的人的回答 Clutton 的回答稍作修改,因此感谢他的快速回复!我不得不命名我的外部 table 并在子查询中指定它,否则 as400 会反击并告诉我它找不到列。我还必须按序列号降序排序,以便我获取低于参数的最高记录(否则,例如,如果我的序列号是 20,它可以获取 5,即使 10 可用并且应该首先显示。这是我现在使用的子查询。请注意实际查询名称 m2p 为 T1。
IFNULL((
SELECT
M2STAT
FROM
M2P as M2P_1
WHERE
M2ON = T1.M2ON
AND M2SEQ < T1.M2SEQ
AND M2PN IN (select R1PN FROM R1P WHERE (RTWC = @WC) AND (R1SEQ = T1.M2SEQ))
ORDER BY M2SEQ DESC
FETCH FIRST ROW ONLY
), 'NULL') as PRIOR_M2STAT
刚刚看了你的问题,它看起来像我经常做的事情来模拟 RPG READPE 操作代码。是M2P的关键Order/Seq?如果是这样,这里有一个基本部分可以帮助您构建查询的其余部分。
我假设您正在尝试使用 SQL 通过密钥获取先前记录。在 RPG 中,这就像对具有 Order/Seq 键的文件的键进行 READPE。
下面是一个使用子查询获取先前记录的状态字段的示例。
SELECT
M2ON, M2PN, M2OQ, M2STAT,
IFNULL((
SELECT
M2STAT
FROM
M2P as M2P_1
WHERE
M2P_1.M2ON = M2ON
AND M2P_1.M2SEQ < M2SEQ
FETCH FIRST ROW ONLY
), '') as PRIOR_M2STAT
FROM
M2P
请注意,这会将子查询包装在 IFNULL
中以处理它是第一个序列号且不存在先前序列的情况。