2009-06-15 3 views
0

SQL 2005 쿼리를 작성하여 3 개의 SCCM 데이터보기의 레코드를 검색하고 결합하려고합니다. 첫 번째보기에는 유효한 PC의 레코드가 포함되어 있습니다. 두 번째는 로그온 정보 (PC ID, 사용자 이름, 타임 스탬프 등)를 포함합니다. 세 번째는 PC-ID, IP 주소를 포함합니다.SCCM 쿼리 : 최신 사용자 로그온 등록 (있는 경우)을 얻고 PC, IP, 사용자, logontimestamp를 표시합니다.

1stview에는 PC 당 하나의 고유 레코드 만 포함됩니다. 두 번째보기에는 PC 당 여러 개의 레코드가 포함될 수 있습니다. 사용자가 컴퓨터에 로그온 할 때마다 하나씩. 세 번째는 PC 당 여러 개의 레코드를 포함 할 수 있습니다. 하나는 데이터베이스에 등록 된 각 IP에 대한 레코드입니다.

는 그래서 같은있다 :

view1 (v_R_System_Valid) fields (among others) 
ResourceID, NetBIOS 

view2 (v_GS_SYSTEM_CONSOLE_USER) fields (among others) 
id,ResourceID,SystemConsoleUser0,LastConsoleUse0 

view3 (v_RA_System_IPAddresses) fields (among others) 
ResourceID,IP_Addresses0 

내가 쿼리 나에게 모든 PC의 첫 번째보기의 목록을 제시하고, 또한 IP 주소 (가능) 표시 할; 로그온이 발생하고 WHOM에 의해 가장 최근의 시간.

내가 만든 sofar 쿼리는 각 PC를 반환하지만 해당 PC에 로그온 한 각 사용자와 최신 사용자가 아닌 해당 사용자를 포함합니다. 아무도 내가 이것을 알아낼 수 있기를 바랍니다. 저는 경험이 많은 SQL 스크립터가 아니며 인터넷에서 정보를 사용하여 아래 코드를 구성했습니다.

내 쿼리 : 사전에

Select 
SV.Netbios_Name0 AS [NetBIOS Name], 
SCU.SystemConsoleUser0 AS [User Name], 
CAST(ISNULL(SCU.theLastTime, 0) AS datetime) AS [Last Console Use] 

from v_R_System_Valid SV 
Left Join (Select ResourceID, SystemConsoleUser0, 
       Max(LastConsoleUse0) as theLastTime 
      from v_GS_SYSTEM_CONSOLE_USER 
      group by ResourceID, SystemConsoleUser0) 
    AS SCU on SCU.ResourceID = SV.ResourceID 

where (SV.Netbios_Name0 not like 'ENC-%') 
and (SV.Netbios_Name0 not like 'NL%') 

order by SV.Netbios_Name0 

감사합니다, 에릭

+0

감사합니다! – bernie

답변

1
나는이 결과 쿼리에 온 아담의 도움으로
SELECT SV.Netbios_Name0 AS [NetBIOS Name]  
     , latest_user.SystemConsoleUser0 as [User Name] 
     , CAST(ISNULL(SCU.theLastTime, 0) AS datetime) AS [Last Console Use] 
     , IP.IP_Addresses0 
from v_R_System_Valid SV 
     left outer join 
       (Select ResourceID 
          ,Max(LastConsoleUse0) as theLastTime 
       from  v_GS_SYSTEM_CONSOLE_USER 
       group by ResourceID 
          ,SystemConsoleUser0) AS SCU 
     on SCU.ResourceID = SV.ResourceID 

     left outer join v_GS_SYSTEM_CONSOLE_USER as latest_user 
     on latest_user.LastConsoleUse0 = SCU.theLastTime 
    and 
     latest_user.ResourceID = SCU.ResourceID 
     left outer join v_RA_System_IPAddresses as IP 
     on IP.ResourceID = SV.ResourceID 
where (SV.Netbios_Name0 not like 'ENC-%') 
    and 
     (SV.Netbios_Name0 not like 'NL%') 
order by SV.Netbios_Name0 
+0

안녕하세요. 여러 조인을 결합하는 좋은 방법에 대해 감사드립니다. 이걸 몰랐어. 당신은 'latest_user.resourceID'대신에 하나의 오타 'latestuser.resourceID'를 만들었고 Groupion 절에서 SystemConsoleUser0을 제거하여 최신 사용자 로그온 등록 만 가져 왔습니다. 또한 v_RA_System_IPAddresses와 결합하여 또 다른 AND를 추가하여 '10. % '로 시작하는 IP 만 가져옵니다. 당신의 도움 없이는 그것을 할 수 없었습니다. 감사. – evegter

+0

좋은 직장 evegter! 네, 큰 오타가 두 개있었습니다. 그 (것)들을 킁킁 거리기를 위해 좋았던 것, 그리고 너의 목적을 위해 일을 만드는. – bernie

0

: 재 포맷에 대한

select SV.Netbios_Name0 AS [NetBIOS Name] 
    , latest_user.SystemConsoleUser0 as [User Name] 
    , CAST(ISNULL(SCU.theLastTime, 0) AS datetime) AS [Last Console Use] 
    , IP.IP_Addresses0 
from v_R_System_Valid SV 
    left outer join 
     (Select ResourceID 
      ,Max(LastConsoleUse0) as theLastTime 
     from v_GS_SYSTEM_CONSOLE_USER 
     group by ResourceID) AS SCU 
     on SCU.ResourceID = SV.ResourceID 
    left outer join v_GS_SYSTEM_CONSOLE_USER as latest_user 
     on latest_user.LastConsoleUse0 = SCU.theLastTime 
      and 
      latest_user.ResourceID = SCU.ResourceID 
    left outer join v_RA_System_IPAddresses as IP 
     on IP.ResourceID = SV.ResourceID where (SV.Netbios_Name0 not like 'ENC-%') 
      and 
      (SV.Netbios_Name0 not like 'NL%') 
      and 
      (IP.IP_Addresses0 like '10.%') 
     order by SV.Netbios_Name0