OK - 最も明確なタイトルではありません。より良く説明するために、ネットワーク上のどのマシンでも死のブルースクリーンが発生していることを示す次の表があります。このクエリ:テーブル1の各レコードの日付より古い、テーブル2の最新レコードで2つのテーブルを結合するにはどうすればよいですか?
SELECT [ID]
,[ServiceTag]
,[BSOD]
FROM [ITDashboard].[dbo].[tl_login_BSOD]
は、次のようになります:
ServiceTagは、各マシンのサービスタグであるとBSODブルースクリーンが発生したときのタイムスタンプです。
私は、さまざまなデータ(Windowsビルド番号を含む)を記録する別のテーブルを持っています。ビルド番号が変更されるたびに(または興味のある他のフィールド)、新しい行がデータベースに書き込まれます。
私はこのようなマシンごとに最新のタイムスタンプを持つレコードを選択することで、Windowsが私のネットワーク上のマシンの構築を見つけるためにこれを使用することができます:
Select w1.machineName
,w1.timestamp
,w1.WindowsBuildNo
From [ITDashboard].[dbo].[tl_login_whom] As w1
Inner Join (
Select machineName
,max(timestamp) as [timestamp]
From [ITDashboard].[dbo].[tl_login_whom]
Group By machineName) As [q]
On w1.machineName = q.machineName
And w1.timestamp = q.timestamp
この返します
(我々はマシン名としてServiceTagsを使用するようMachineNameにとServiceTagは交換可能です。)
I最初のテーブルを戻すクエリを作成するだけでなく、ブルースクリーンが発生した時点でWindowsビルド番号を表示します。
私は次のクエリではほとんど存在しています:
SELECT [ID]
,[ServiceTag]
,[BSOD],
WindowsBuildNo
FROM [ITDashboard].[dbo].[tl_login_BSOD] b
JOIN (
Select w1.machineName
,w1.timestamp
,w1.WindowsBuildNo
From [ITDashboard].[dbo].[tl_login_whom] As w1
Inner Join (
Select machineName
,max(timestamp) as [timestamp]
From [ITDashboard].[dbo].[tl_login_whom]
Group By machineName) As [q]
On w1.machineName = q.machineName
And w1.timestamp = q.timestamp
) w on w.machineName = b.serviceTag
が、これは毎回、最新のビルド番号を戻します。すなわち、ラップトップが1ヵ月前に古いビルド番号にブルースクリーンを表示したが、新しいビルドになった場合は、新しいビルドが常に表示されます。
2番目のクエリから戻す必要があるのは、対応するServiceTag/MachineNameのBSODタイムスタンプよりも新しいという最新のレコードです。
どのDBMSを使用していますか? http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –
サンプルデータを入力してください(イメージではなく)テキストとして、あるいはさらには 'INSERT'ステートメントとして、あなたのテーブルのために。次に、そのサンプルデータに基づいて、最終結果がどのように表示されるかを示します。また、使用するSQL Serverのバージョンのタグを追加します。 –