2012-02-09 92 views
2

我有兩個表:一個表(好的,它是一個視圖),vComputer,通過唯一的GUID列出許多計算機。另一個表Inv_Screensaver_File_Info列出計算機是否運行了自定義清單並報告其屏幕保護程序文件的當前狀態。將每一行的列與特定行的列進行比較

我需要列出Inv_Screensaver_File_Info中不存在的所有計算機的GUID,以及存在但其Inv_Screensaver_File_Info.LastModified值小於特定記錄結果的所有計算機的GUID,該表代表授權來源。

這就是我想要的所有行比較的記錄: MYSERVER B5A85423-26C4-40C0-DA28-237FB4CB0B33 2012-02-09 11:38:50000 獨特的GUID存在的vc.Guid,也可以作爲SFI ._ResourceGuid

這樣做的SQL方法是什麼?

SELECT vc.Name, 
vc.Guid, 
sfi.LastModified 
FROM vComputer vc 
LEFT OUTER JOIN Inv_Screensaver_File_Info sfi ON sfi._ResourceGuid=vc.Guid 
WHERE sfi.LastModified IS NULL 
ORDER BY sfi.LastModified DESC 

回答

0
SELECT vc.Name, vc.Guid 
FROM vComputer vc 
    LEFT JOIN Inv_Screensaver_File_Info sfi ON sfi._ResourceGuid=vc.Guid 
    INNER JOIN vComputer vc2 ON vc2.Guid = 'B5A85423-26C4-40C0-DA28-237FB4CB0B3' 
    INNER JOIN Inv_Screensaver_File_Info sfi2 ON sfi2._ResourceGuid = vc2.Guid 
WHERE sfi.LastModified IS NULL 
    OR sfi.LastModified < sfi2.LastModified 
+0

不幸的是,上次更改時間不vComputer存在。我試着大量修改你的建議,但我無法實現它的工作。權威人士的資料(vc。和.sfi中的Guid'B5A85423-26C4-40C0-DA28-237FB4CB0B33')是否需要放在單獨的表格中? – mikeclemson 2012-02-09 19:23:44

+0

@mikeclemson什麼價值,你在乎什麼時候你比較MYSERVER B5A85423-26C4-40C0-DA28-237FB4CB0B33 2012-02-09 11:38:50,000 – 2012-02-09 19:25:24

+0

@mikeclemson現在看看 – 2012-02-09 19:34:28

0

它總是有點難以回答查詢的問題,沒有模式和期望的輸出的例子,但這裏的一個嘗試。

select vc.Name, vc.Guid, vc.LastModified 
from vComputer vc 
where not exists(select 1 
        from Inv_Screensaver_File_Info sfi 
        where sfi._ResourceGuid = vc.Guid) 
or  exists(select 1 
       from Inv_Screensaver_File_Info sfi1 
        inner join Inv_Screensaver_File_Info sfi2 
         on sfi2.ResourceGuid = sfi1.ResourceGuid and 
          sfi2.LastModified < sfi1.LastModified 
       where sfi._ResourceGuid = vc.Guid) 
0

你說你需要的只是GUID,添加vc.Name的選擇和group by如果你需要它:

DECLARE @CutoffDateTime UNIQUEIDENTIFIER 
SELECT @CutoffDateTime = LastModified FROM MyServer WHERE Guid = 'B5A85423-26C4-40C0-DA28-237FB4CB0B33' 
SELECT vc.Guid 
FROM vComputer vc 
LEFT OUTER JOIN Inv_Screensaver_File_Info sfi ON sfi._ResourceGuid = vc.Guid 
GROUP BY vc.Guid 
HAVING MAX(sfi.LastModified) < @CutoffDate || MAX(sfi.LastModified) IS NULL 
相關問題