实际上,您不需要循环来迭代结果集,因为 SELECT 语句中的函数在每个结果记录上执行。 您可以使用MySQL 文档页中描述的控制流函数来处理结果中的相关数据。在此堆栈溢出问题"SELECT"语句中,有一些示例 " IF " - 根据列值选择输出值,或者您也可以在 MySQL 中使用不同数据组合语句的组合 我确实已经成功地根据您通过使用 和子查询的组合提供的映像获得了预期输出。
UNIONJOIN
代码
SELECT *, mqa.Current_Status as Result
FROM MyQuery mqa
WHERE
mqa.Block = 1
AND mqa.Status_History IS NULL
UNION
SELECT mqb.*, mqb.Status_History as Result
FROM MyQuery mqb
WHERE
Status_History IS NOT NULL
UNION
SELECT mqc.ID,
mqc.Period,
mqc.Current_Status,
mqc.Status_History,
mqc.Block,
(SELECT TOP 1 mqd.Status_History FROM MyQuery mqd
WHERE mqd.ID = mqc.ID
AND mqd.Block < mqc.Block
AND mqd.Status_History IS NOT NULL
ORDER BY Block DESC)
FROM MyQuery mqc
WHERE
mqc.Status_History IS NULL
AND mqc.Block <> 1
结果
| ID | Period | Current_Status | Status_History | Block | Result |
|--------|--------|----------------|----------------|-------|--------|
| 012014 | 201710 | 5 | (null) | 6 | 7 |
| 012014 | 201711 | 5 | 7 | 5 | 7 |
| 012014 | 201712 | 5 | (null) | 4 | 3 |
| 012014 | 201810 | 5 | (null) | 3 | 3 |
| 012014 | 201811 | 5 | 3 | 2 | 3 |
| 012014 | 201812 | 5 | (null) | 1 | 5 |
| 012015 | 201710 | 2 | (null) | 6 | 10 |
| 012015 | 201711 | 2 | (null) | 5 | 10 |
| 012015 | 201712 | 2 | (null) | 4 | 10 |
| 012015 | 201810 | 2 | (null) | 3 | 10 |
| 012015 | 201811 | 2 | (null) | 2 | 10 |
| 012015 | 201812 | 2 | 10 | 1 | 10 |
您可以在此SQLFiddle中播放上述代码
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。