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

1294

被折叠的 条评论
为什么被折叠?



