sql将最新数据拉入另一个表
我有两个表Camera和CameraImages分别有列-[Id,Name]和列-[CamerId(FK),DateAdded,FileLocation]。我有一个系统,我分配了一堆相机,每天都会存储新的相机图像。我需要在摄影机中添加一个新列,名为[LatestCameraImageLocation]。我还需要编写一个sql脚本来循环我现有的CameraImages,找到每个摄像头的最新CameraImages,并将文件位置从CameraImages写入Cameras中的LatestCameraImageLocation列。我尝试了包括cte在内的一系列方法,但似乎无法使其发挥作用。这取决于它的用途,可能值得重新思考一下您的模型。但严格来说,这是一个问题sql将最新数据拉入另一个表,sql,sql-server,Sql,Sql Server,我有两个表Camera和CameraImages分别有列-[Id,Name]和列-[CamerId(FK),DateAdded,FileLocation]。我有一个系统,我分配了一堆相机,每天都会存储新的相机图像。我需要在摄影机中添加一个新列,名为[LatestCameraImageLocation]。我还需要编写一个sql脚本来循环我现有的CameraImages,找到每个摄像头的最新CameraImages,并将文件位置从CameraImages写入Cameras中的LatestCamera
UPDATE Camera
FROM (SELECT CameraID,
FileLocation
FROM (SELECT FileLocation,
CameraID,
ROW_NUMBER() OVER
( PARTITION BY cameraID
ORDER BY dateAdded DESC
) rn
FROM CameraImages
)
WHERE rn = 1
) UPDT
SET Camera.LatestCameraImageLocation = UPDT.fileLocation
WHERE Camera.ID = UPDT.CameraID;
<>如果是我,我会考虑创建一个视图,因为否则,每当摄影图像发生变化时,这个更新就需要运行。视图方法将保持同步,无需干预
CREATE VIEW CAMERA_LOCATION AS
SELECT cam.id,
ci.FileLocation
FROM Camera cam
INNER
JOIN
(SELECT FileLocation,
CameraID,
ROW_NUMBER() OVER
( PARTITION BY cameraID
ORDER BY dateAdded DESC
) rn
FROM CameraImages
) ci
ON cam.id = ci.cameraID
AND rn = 1;
您可以使用
不存在
,如下所示:
Select c.*, ci.filelocation as latestcameraimage
From camera c
Join cameraimage ci on c.id = ci.cameraid
Where not exists
(Select 1 from cameraimage cii
Where cii.camerid = ci.cameraid
And cii.dateadded > ci.dateadded)
为什么要循环?你;重新编写SQL,这样循环会非常慢。此外,这听起来更像是
视图的候选对象,否则您可能会在以后声明希望使用新的最新图像更新表(始终)。