如何解决比较同一列oracle中的日期
我有下表
项目编号 | 阶段 | 完成日期 |
---|---|---|
PROJ_001 | 1 | 12-MAR-21 |
PROJ_001 | 2 | 14-MAR-21 |
PROJ_001 | 3 | 15-MAR-21 |
PROJ_001 | 4 | 18-MAR-21 |
PROJ_002 | 1 | 18-MAR-21 |
PROJ_002 | 2 | 19-MAR-21 |
PROJ_002 | 3 | 19-MAR-21 |
PROJ_002 | 4 | 23-MAR-21 |
假设表格按项目编号和阶段排序。 我必须检查阶段 1 中的日期是否小于阶段 2 同样,第 2 阶段的日期应小于第 3 阶段 第三阶段的日期应该小于第四阶段。
这应该发生在项目的所有阶段。
项目编号 | 阶段 | 完成日期 | 输出 |
---|---|---|---|
PROJ_001 | 1 | 12-MAR-21 | 正确 |
PROJ_001 | 2 | 14-MAR-21 | 正确 |
PROJ_001 | 3 | 15-MAR-21 | 正确 |
PROJ_001 | 4 | 18-MAR-21 | 正确 |
PROJ_002 | 1 | 19-MAR-21 | 不正确 |
PROJ_002 | 2 | 17-MAR-21 | 不正确 |
PROJ_002 | 3 | 16-MAR-21 | 正确 |
PROJ_002 | 4 | 23-MAR-21 | 正确 |
此处项目 2 的第 1 阶段不低于第 2 阶段,因此不正确。 默认情况下,阶段 4 应该是正确的。
有人可以指导我吗?
解决方法
如果一个阶段的时间序列顺序等于阶段编号,那么这个阶段是“正确的”,那么问题就不重要了。在回答我提出的问题时,OP 说“如果两个阶段之间的阶段是“错误的”,那么所有的阶段都不能被认为是错误的”。我将其解释为:如果一个阶段在时间序列中的顺序等于阶段编号,则该阶段是“正确的”。
cout<<*(it+1);
列可以通过直接在 if (it != S.end()) {
it++;
if (it != S.end()) {
cout << *it;
}
}
表达式中比较阶段号和序列号来填充。像这样:
output
请注意,在示例数据中,case
列中有时会出现相等的值。在这种情况下,我假设这些阶段以正确的顺序完成(因此,select project_no,stage,completion_date,case row_number() over (partition by project_no
order by completion_date,stage)
when stage then 'correct' else 'incorrect' end as output
from the_table
order by {whatever} -- if needed
;
分析函数的 completion_date
子句中的第二个标准)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。