簡略化したシナリオ例では、特定のタイムスタンプと建物を指定して、70度に最も近いセンサー温度(「TemperatureOfRecord」と呼ばれる)を返すことが目的です。たとえば、午前8時のタイムスタンプの建物#1のTemperatureOfRecordは65度です。これは、65度が80度よりも70度に近いためです。「デルタ」列は、センサー温度から70度を引いた絶対値を返す計算列です。差動を使用して、70度の目標温度に対して各センサー温度をテストします。
以下のネストされた相関サブクエリは正しい結果を返しますが、実際のシナリオでこのアプローチをスケールアウトするのに多くの問題があります。したがって、私が使用できるより簡単なアプローチがあるかどうかを尋ねたいと思います。
SELECT
tt.TmStamp
, tt.Building
, tt.Sensor
, tt.Temperature
, tt.Delta
, (SELECT tt2.Temperature
FROM dbo.TempTest tt2
WHERE tt2.Building = tt.Building
AND tt2.TmStamp = tt.TmStamp
AND tt2.Delta =
(SELECT MIN(tt3.Delta)
FROM dbo.TempTest tt3
WHERE tt3.Building = tt.Building
AND tt3.TmStamp = tt.TmStamp)
) AS TemperatureOfRecord
FROM dbo.TempTest tt
上記のクエリの結果は以下のとおりです。