【发布时间】:2018-10-28 18:22:02
【问题描述】:
我的数据库的结构大致是这样(简化的):
三表:顺序、步骤、材料
“订单”表包含ID 和material 列
表“step”包含ID、order和stepnumber列
“材料”表包含ID 和description 列
Order
--------------------------------
**ID** **Number** **Material**
1 X1 11
2 X2 12
3 X3 13
Step
---------------------------------------
**ID** **Order** **Stepnumber***
1 X1 X110
2 X1 X120
3 X1 X170
4 X1 X180
5 X2 X270
6 X2 X280
Material
---------------------------------------
**ID** **Description***
11 Mat1
12 Mat2
13 Mat3
需要注意的是,表的stepnumber列由订单号(例如X1)和一个标识步骤的数字(10、20、70、80等)组成,并且作为您可以看到stepnumber 列的多个值引用了相同的订单。
我正在使用这个查询:
select order.number,step.stepnumber, material.id,material.description,
from db.order inner join db.stepnumber
on order.number = step.order
inner join db.material
on material.id = order.material
where step.stepnumber not like '%10'
and step.stepnumber not like '%20'
group by order.number, step.stepnumber, material.id, material.description
从查询中可以看出,我想提取订单和步骤数据,并且我根据stepnumber 值排除了一些步骤。
现在,查询输出为:
order.number step.stepnumber material.id material.description
-------------------------------------------------------------
X1 X170 11 Mat1
X1 X180 11 Mat1
X2 X270 12 Mat2
X2 X280 12 Mat2
我想实现每个订单只提取一行,取stepnumber 值较高的那一行。所以结果应该是:
order.number step.stepnumber material.id material.description
-------------------------------------------------------------
X1 X180 11 Mat1
X2 X280 12 Mat2
我尝试将MAXfunction 放到step.stepnumber 中,但没有任何效果。
【问题讨论】:
标签: sql database oracle join select