テーブルのグループごとに最初のレコードのコピーを (少し変更して) 挿入したいと思います。「with」ステートメントとパーティションの行番号を使用して、グループごとの完全な最初のレコードを取得できます。
with rankedByTime_PerInteraction as(
SELECT
ROW_NUMBER() over(PARTITION By displayId, ObjectId, InteractionId order by AssetLog.Recorded Desc) as timeRank,
CasLog.*
FROM AssetLog INNER JOIN CasLog ON AssetLog.Id = CasLog.ID
where FixType > 0
)
select newId()
,EVENTCOUNT
,PROTOCOLVERSION
,EVENTLOOKUPSET
,2000
,DISPLAYSERIAL
,DISPLAYID
,MACHINETYPE
,GEAR
,RF_NODE
,OBJECTSERIAL
,OBJECTRSSILEVEL
,OBJECTSTATUS
,OBJECTID
,OBJECTINFO
,CASTIMESTAMP
,SPARE1
,SPARE2
,[CHECKSUM]
,ALARMTIME
,MINRANGE
,EventId
,InteractionId
from rankedByTime_PerInteraction
where timeRank = 1
これはうまくいきます。ただし、これをステートメントへの挿入で使用したいと思います。
INSERT INTO [CasLog]
([ID]
,[EVENTCOUNT]
,[PROTOCOLVERSION]
,[EVENTLOOKUPSET]
,[EVENTNUMBER]
,[DISPLAYSERIAL]
,[DISPLAYID]
,[MACHINETYPE]
,[GEAR]
,[RF_NODE]
,[OBJECTSERIAL]
,[OBJECTRSSILEVEL]
,[OBJECTSTATUS]
,[OBJECTID]
,[OBJECTINFO]
,[CASTIMESTAMP]
,[SPARE1]
,[SPARE2]
,[CHECKSUM]
,[ALARMTIME]
,[MINRANGE]
,[EventId]
,[InteractionId])
with rankedByTime_PerInteraction as(
SELECT
ROW_NUMBER() over(PARTITION By displayId, ObjectId, InteractionId order by AssetLog.Recorded Desc) as timeRank,
CasLog.*
FROM AssetLog INNER JOIN CasLog ON AssetLog.Id = CasLog.ID
where FixType > 0
)
select newId()
,EVENTCOUNT
,PROTOCOLVERSION
,EVENTLOOKUPSET
,2000
,DISPLAYSERIAL
,DISPLAYID
,MACHINETYPE
,GEAR
,RF_NODE
,OBJECTSERIAL
,OBJECTRSSILEVEL
,OBJECTSTATUS
,OBJECTID
,OBJECTINFO
,CASTIMESTAMP
,SPARE1
,SPARE2
,[CHECKSUM]
,ALARMTIME
,MINRANGE
,EventId
,InteractionId
from rankedByTime_PerInteraction
where timeRank = 1
ただし、キーワード「with」の近くで構文が正しくありません。
挿入ステートメント内で with ステートメントを使用することは可能ですか?
そうでない場合、グループごとに最初のレコードのコピーをテーブルに挿入するにはどうすればよいですか?
ありがとう