使用Microsoft SQL Server速成版(64位)10.0.550.0过滤Autodesk Vault中的垂直数据,获得最新的记录每个绘图
我试图从Autodesk Vault服务器提取数据。涉及到获取所需数据的SQL对于我当前的知识水平来说太高级了,所以我试图用Google和StackOverflow中的一些部分作为拼图来解决难题。使用this excellent answer我能够将垂直数据转换为可管理的水平格式。
Autodesk Vault数据库存储有关CAD绘图(等等)的信息。主垂直表dbo.Property
保存有关每个CAD图形的所有不同修订版本的信息。我目前面临的问题是我得到的数据太多。我只想从每张CAD图纸的最新版本中获取数据。
这里是到目前为止
select
CreateDate,
EntityID,
PartNumber,
CategoryName,
[Subject],
Title
from
(
select
EntityID,
CreateDate,
[53] as PartNumber,
[28] as CategoryName,
[42] as [Subject],
[43] as Title
from
(
select
p.Value,
p.PropertyDefID,
p.EntityID,
e.CreateDate
from dbo.Property as p
inner join dbo.Entity as e on p.EntityID = e.EntityId
where p.PropertyDefID in(28, 42, 43, 53)
and e.EntityClassID = 8
) t1
pivot
(
max(Value)
for PropertyDefID in([28], [42], [43], [53])
) t2
) t3
where PartNumber is not null
and PartNumber != ''
and CategoryName = 'Drawing'
-- (1) additional condition
order by PartNumber, CreateDate desc
哪里dbo.Property.Value
是sql_variant
数据类型的我的SQL。上面的查询导致类似于以下的数据集:
CreateDate | EntityID | PartNumber | CategoryName | Subject | Title
---------------------------------------------------------------------
2016-01-01 | 59046 | 10001 | Drawing | Xxxxx | Yyyyy
2016-05-01 | 60137 | 10001 | Drawing | Xxxxx | Yyyyy
2016-08-01 | 62518 | 10001 | Drawing | Xxxx | Yyyyyy
2016-12-16 | 63007 | 10001 | Drawing | Xxxxxx | Yyyyyy
2016-01-01 | 45776 | 10002 | Drawing | Zzzzz | NULL
2016-11-01 | 65011 | 10002 | Drawing | Zzzzzz | NULL
...
(about 23000 rows)
我遇到的问题是我正在为每个图形获取所有修订。在上面的示例中,我只想要PartNumber=10001
的最新修订日期为'2016-12-16'等。
我也查看了this answer关于如何分组和选择其中一列具有最大值的行,但我似乎无法弄清楚如何将两者结合起来。我试着在上面的查询中添加下面的代码片段到注释行中,但它在许多不同的层次上失败。
and (PartNumber, CreateDate) in
(
select PartNumber, max(CreateDate)
from t3
group by PartNumber
)
的原因,我标记这个问题“转动”,尽管旋转已经完成,是我怀疑什么是透视是造成我的麻烦。我只是还没有能够围绕这个主要的东西包围我的头,我的SQL优化技能严重缺乏。也许过滤应该在内部完成?
'SELECT x。 FROM(你的查询)x JOIN(选择partnumber,MAX(CreateDate)FROM(你的QUERY HERE)GROUP BY partnumber)y ON y.partnumber = x.partnumber AND y.createdate = x.createdate' – Strawberry
我想你有不使用[Web服务](https://knowledge.autodesk。COM /支持/跳马产品/学习,探索/ CAAS/CloudHelp/cloudhelp/2014/ENU /库/文件/ GUID-F21E7DD6-39E9-473C-84BB-3446BCAFCCC0-htm.html)?从文档:> **直接访问**并严格禁止编辑Vault数据库。 – Maxence
@Maxence不知道这是否是一个很好的理由,但我得到了一个RDP到服务器的MSSQL SMS窗口打开并要求从数据库中提取某个数据集。我不知道有一个API。我试图在网上搜索文档,但我发现它缺乏。有没有REST API?我们需要从简单的Web应用程序访问Vault。 –