Использование Microsoft SQL Server Express Edition (64-разрядная версия) 10.0.550.0Фильтрация Autodesk Vault вертикальные данные, получать новейшую запись для каждого чертежа
Я пытаюсь извлечь данные с сервера Autodesk Vault. SQL, связанный с получением требуемых данных, слишком продвинут для моего текущего уровня знаний, поэтому я пытаюсь заложить головоломку, используя биты из Google и StackOverflow как части. Используя this excellent answer, я смог перенести вертикальные данные в управляемый горизонтальный формат.
В базе данных Autodesk Vault хранится информация о чертежах САПР (между прочим). В основной вертикальной таблице dbo.Property
содержится информация обо всех различных версиях каждого чертежа САПР. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я получаю слишком много данных. Мне просто нужны данные из последней редакции каждого чертежа САПР.
Вот мой SQL до сих пор
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
типа данных. Выше запрос результатов в наборе данных похож на это:
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 серьезно отсутствуют. Может быть, фильтрация должна выполняться на внутреннем уровне?
'ВЫБЕРИТЕ x. FROM (ВАШ ВОПРОС ЗДЕСЬ) x JOIN (SELECT partnumber, MAX (CreateDate) FROM (ВАШ ВОПРОС ЗДЕСЬ) ГРУППА BY partnumber) y ON y.partnumber = x.partnumber И y.createdate = x.createdate' – Strawberry
Я полагаю, что у вас есть хорошая причина не использовать [веб-службы] (https: //knowledge.autodesk.ком/поддержка/сводом продукты/узнать, исследовать/CAAS/CloudHelp/cloudhelp/2014/RUS/Vault/файлы/GUID-F21E7DD6-39E9-473C-84BB-3446BCAFCCC0-htm.html)? Из документов:> ** Прямой доступ ** и редактирование базы данных Vault строго запрещено. – Maxence
@Maxence Не уверен, что это квалифицируется как хорошая причина или нет, но мне дали RDP серверу с открытым окном MSSQL SMS и попросил извлечь определенный набор данных из базы данных. Я не знал, что есть API. Я пробовал искать в Интернете документацию, но мне это не хватало. Есть ли REST API? Нам нужно получить доступ к Vault из простого веб-приложения. –