windchill中查询最大最新版本的数据中遇到的坑

在Windchill中查询最大最新版本数据时,遇到状态使用MAX函数导致结果错误的问题。通过在状态前拼接数字版本进行解决,避免MIN/MAX函数对有多种状态的结果产生影响。最终SQL查询示例展示了如何正确获取编码、名称及版本状态。文章还提到了使用子查询可能出现的问题,即小版本ID大于大版本ID的情况,建议使用GROUP BY确保正确性。

-----------过程中遇到的坑-------------------------
查询出所有的版本,发现最大最新版本的状态是Obsolete
在这里插入图片描述
状态用MAX函数后,显示的结果就走样了
在这里插入图片描述
解决办法:要不换个min函数试试
在这里插入图片描述
感觉好像是对了,仔细一想:万一还有其他状态呢,inwork,underreview,这个min/max函数就对结果影响了

在状态前给它拼接上数字类型的版本应该就可以了,脑回路清奇,prefect
在这里插入图片描述
给出最终版本的SQL:
select m.wtpartnumber as 编码, m.name as 名称,
max(p.versionida2versioninfo || ‘.’ || p.iterationida2iterationinfo||’–’||p.statestate) as 版本状态
from wcadmin.manufacturerpartmaster m, wcadmin.manufacturerpart p
where p.ida3masterreference = m.ida2a2
and p.latestiterationinfo = 1
and m.wtpartnumber = ‘ABA050CJA0C9’
group by m.wtpartnumber,m.name

上面说的是第一种坑,因为我不想写子查询
那第二种坑是写子查询的,子查询的逻辑是:
先把wtpart,和wtpartmaster关联,然后max(mst.ida2a2),
取出mst.ida2a2后再关联查询part的具体信息
这种思路大多数时候是有效的,只有一种情况会见鬼:
就是小版本的ID比大版本的ID还大的时候,虽然几率很小,但是我在HW的项目上踩了三次坑

所以,我觉得还是用group by 靠谱,编码去重后,取最大版本最新版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值