2009-06-15 11 views
0

3つのSCCMデータビューのレコードを取得して組み合わせるSQL 2005クエリを作成しようとしています。 最初のビューには有効なPCのレコードが含まれています。 2番目のログオン情報には、PC-ID、ユーザー名、タイムスタンプなどのログオン情報が含まれています。 3番目にはPC-id、IPアドレスが含まれています。SCCMクエリ:最新のユーザーログオン登録(ある場合)を取得し、PC、IP、ユーザー、logontimestampを表示します。

1stviewには、PCごとに1つの固有レコードしか含まれていません。 2番目のビューには、PCごとに複数のレコードを含めることができます。ユーザーがコンピュータにログオンするたびに1つずつ。 3番目にはPCごとに複数のレコードを含めることができます。データベースに登録されているIPごとに1つずつです。

ので、それは次のようだ:私は、クエリは最初のビューで私のすべてのPCのリストを提示し、また、表示したい

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 

は(入手可能です)IPアドレス;ログオンが発生したLATEST時刻と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'というタイプミスを1つだけ作成し、最新のユーザーログオン登録だけを取得するためにGroup by句からSystemConsoleUser0を削除しました。 また、v_RA_System_IPAddressesとの結合で別のANDを追加して、'10。% 'で始まるIPだけを取得します。あなたの助けなしにそれをしなかったでしょう。ありがとう。 – evegter

+0

いい仕事があります!うん、2つの大きなタイプミスがあった。それらを盗聴し、あなたの目的のために働くことを行うために、後で良いです。 – 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 
関連する問題