2012-02-09 2 views
2

У меня есть две таблицы: одна таблица (хорошо, это представление), vComputer, перечисляет множество компьютеров по уникальному GUID. Другая таблица Inv_Screensaver_File_Info перечисляет компьютер, если он запускает пользовательский инвентарь и сообщает, как текущие файлы его заставки.Сравните столбец каждой строки с столбцом конкретной строки

Мне нужно указать GUID всех компьютеров, которые не присутствуют в Inv_Screensaver_File_Info, а также любые компьютеры, которые присутствуют, но значение Inv_Screensaver_File_Info.LastModified которого меньше, чем результат конкретной записи в этой таблице, который представляет собой авторитетный источник.

Это запись, которую я хочу, чтобы все строки, чтобы сравнить: MYSERVER B5A85423-26C4-40C0-DA28-237FB4CB0B33 2012-02-09 11: 38: 50,000 Уникальный идентификатор 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

К сожалению, LastModified не существует в vComputer. Я пробовал сильно изменить ваше предложение, но я не мог заставить его работать. Должны ли данные независимого источника (Guid 'B5A85423-26C4-40C0-DA28-237FB4CB0B33' в vc. И .sfi) находиться в отдельной таблице? – mikeclemson

+0

@mikeclemson какое значение, вам интересно, когда вы сравниваете с MYSERVER B5A85423-26C4-40C0-DA28-237FB4CB0B33 2012-02-09 11: 38: 50.000 –

+0

@mikeclemson проверить это сейчас –

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 к выбрать и группе, если вам нужно, что тоже:

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 
Смежные вопросы