私は3つのテーブルを持っています
建物
BuildingKey(int) | BuildingID(varchar) | ...
エリア
areaKey(int) | areaID(varchar) | buildingKey(int-FK[Buildings]) | ...
取引
transactionKey(int) | areaKey(int-FK[Areas]) | value(float) | trnDateTime(DateTime)
に複数ある場合がありAreas
ますBuilding
。
すべての領域には多くのTransactions
、さまざまなvalue
、さまざまながありますtrnDateTime
。
私がやりたいことは、(が与えられたとき)それぞれの最新value
(トランザクション)を取得することです。 Area
Building
buildingKey
このような以前の質問をいくつか参照して、次のことを試しました。
(1)
DECLARE @buildingKey INT
SET @buildingKey = 3
;WITH Vals AS (
SELECT T.areaKey AS AreaKey,
T.value AS CurrentValue,
T.trnDateTime AS RecordedDateTime,
ROW_NUMBER() OVER (PARTITION BY B.buildingKey ORDER BY T.trnDateTime DESC) RowID
FROM Buildings B INNER JOIN
Areas A ON B.buildingKey = A.buildingKey INNER JOIN
Transactions T ON A.areaKey = T.areaKey
WHERE B.buildingKey = @buildingKey
)
SELECT AreaKey,
CurrentValue,
MAX(RecordedDateTime) AS RecentReading,
RowID
FROM Vals
WHERE RowID = 1
GROUP BY AreaKey, CurrentValue, RowID
!) (すべてのエリアの中で) 最新の値を返します。各エリアの最新値ではありません!
(2)
DECLARE @buildingKey INT
SET @buildingKey = 3
SELECT A.areaKey AS AreaKey,
A.areaID AS AreaID,
T.value AS CurrentValue,
T.trnDateTime AS RecordedDateTime
FROM Areas A, Buildings B, Transactions T
WHERE @buildingKey = B.buildingKey AND
B.buildingKey = A.buildingKey AND
T.areaKey = A.areaKey AND
T.trnDateTime IN (SELECT MAX(T.trnDateTime), T.areaKey
FROM Transactions T
GROUP BY T.areaKey)
!) エラーが出る -->
Msg 116, Level 16, State 1, Line 16
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.