我想请求您帮助构建单个ORACLE SQL语句:
使用作业表如下
Object | Operation | Time
A | Move | 12:01
B | Move | 12:02
C | Pickup | 12:03
D | Move | 12:04
B | Pickup | 12:05
Run Code Online (Sandbox Code Playgroud)
获取结果表如下.
Object | Operation | Time | Cause
A | Move | 12:01 | C
B | Move | 12:02 | C
D | Move | 12:04 | B
Run Code Online (Sandbox Code Playgroud)
这是为了确定哪个Pickup操作导致每个Move操作.
"原因"列必须包括移动操作旁边最小时间的拾取作业记录的对象.
我有一些想法如下,但不知道如何.
- .它需要在Move的子查询和Pickup的子查询之间使用join语句
.必须通过要加入的移动记录对分拣子查询进行分区
- .必须仅从Pickup子查询的每个分区中选择最高记录
这是我的尝试:
select m.object, m.operation, m.time,
max(p.object) keep (dense_rank first order by p.time) cause,
max(p.time) keep (dense_rank first order by p.time) cause_time
from a m
join a p on (p.time > m.time)
where m.operation = 'Move'
and p.operation = 'Pickup'
group by m.object, m.operation, m.time;
Run Code Online (Sandbox Code Playgroud)
我将列时间设置为数字,这没有任何重要性,因为它是可排序的。
我已将表分成两部分:“移动”和“取件”,并且连接是按时进行的,“时间”pickup大于“时间” move。(这种类型的连接对性能影响不大)。然后我用最小的(子句, with )choose拾取。timefirstorder by p.time
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |