所以,我试图在SCCM中创建一个我想给我的收藏品
没有链接到name0
文件的资产列表(.ide
)比新版本更新
21天。一旦确定,我就可以去调查为什么这些资产没有更新。
到目前为止,我已经在SSMS中编写了以下查询,然后才在SCCM中进行设置, 但很明显,这不是正确的做法。
SELECT DISTINCT v_GS_SYSTEM.Name0
FROM v_GS_SYSTEM inner join v_GS_SoftwareFile
ON v_GS_SoftwareFile.ResourceID = v_GS_SYSTEM.ResourceID
WHERE (DATEDIFF(day, v_GS_SoftwareFile.ModifiedDate, getdate()) >=21)
AND NOT
(DATEDIFF(day, v_GS_SoftwareFile.ModifiedDate, getdate()) <=21)
AND
v_GS_SoftwareFile.FileName like '/%.ide/'
ORDER BY v_GS_SYSTEM.Name0;
此代码返回&#34;正确&#34;价值但不考虑资产可能的事实 仍然有与之相关的较新的ide文件,这违背了本练习的目的。
所以(我想!)我的问题是,有没有办法检查Name0是否有任何关联的ModifiedDate
记录
是否超过21天,如果此检查返回true / false,则仅返回一个值?
答案 0 :(得分:0)
您可以在其中添加一个额外的EXISTS
子句。
我相信您尝试撰写的查询是:
SELECT DISTINCT vs.Name0
, vsf.FilePath
, vsf.FileName
FROM v_GS_SYSTEM vs
INNER JOIN v_GS_SoftwareFile vsf
ON vsf.ResourceID = vs.ResourceID
WHERE (DATEDIFF(day, vsf.ModifiedDate, getdate()) >= 21)
AND NOT (DATEDIFF(day, vsf.ModifiedDate, getdate()) <= 21) -- this seems a bit redundant and might even exclude some rows where the result is exactly (21 * 24) hours
AND vsf.FileName LIKE '/%.ide/'
AND NOT EXISTS (
SELECT 1
FROM v_GS_SoftwareFile vsf2
WHERE vsf2.ModifiedDate > GETDATE() - 21
AND vsf2.ResourceId = vsf.ResourceId
)
ORDER BY vs.Name0;
您可以通过保留或删除TRUE
中的FALSE
来更改NOT
/ AND NOT EXISTS
支票。
修改强>
由于您提到了性能问题,请检查您是否有非群集的idex:
ResourceId
列上(我真的希望这不是一个视图,但是v_
一开始就让我觉得这个是。)ResourceID
列上(此处相同的评论)答案 1 :(得分:0)
要将所有'*.ide'
个文件加入其资源,但仅限于过去21天内未修改任何'*.ide'
个文件的资源...
SELECT
s.Name0,
f.FilePath,
f.FileName
FROM
(
SELECT
*,
MAX(ModifiedDate) OVER (PARTITION BY ResourceID) AS ResourceMaxModifiedDate
FROM
v_GS_SoftwareFile
WHERE
FileName LIKE '%.ide'
)
AS f
INNER JOIN
v_GS_SYSTEM AS s
ON s.ResourceID = f.ResourceID
WHERE
f.ResourceMaxModifiedDate <= DATEADD(DAY, -21, GETDATE())
ORDER BY
s.Name0,
f.FilePath,
f.FileName
获取过去21天内未修改'*.ide'
个文件的所有资源...
SELECT
s.Name0
FROM
v_GS_SYSTEM AS s
WHERE
NOT EXISTS (
SELECT *
FROM v_GS_SoftwareFile AS f
WHERE f.FileName LIKE '%.ide'
AND f.ResourceID = s.ResourceID
AND f.ModifiedDate >= DATEADD(DAY, -21, GETDATE())
)
ORDER BY
s.name0
根据您最终得到的查询,考虑这些表上的索引。覆盖指数超过(ResourceID, ModifiedDate)
会很有用。并且文件类型的标志也是有用的(LIKE '*.ide'
将要求扫描行以找到匹配,它不能用典型的索引来解决)。