Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql将最新数据拉入另一个表_Sql_Sql Server - Fatal编程技术网

sql将最新数据拉入另一个表

sql将最新数据拉入另一个表,sql,sql-server,Sql,Sql Server,我有两个表Camera和CameraImages分别有列-[Id,Name]和列-[CamerId(FK),DateAdded,FileLocation]。我有一个系统,我分配了一堆相机,每天都会存储新的相机图像。我需要在摄影机中添加一个新列,名为[LatestCameraImageLocation]。我还需要编写一个sql脚本来循环我现有的CameraImages,找到每个摄像头的最新CameraImages,并将文件位置从CameraImages写入Cameras中的LatestCamera

我有两个表CameraCameraImages分别有列-[Id,Name]和列-[CamerId(FK),DateAdded,FileLocation]。我有一个系统,我分配了一堆相机,每天都会存储新的相机图像。我需要在摄影机中添加一个新列,名为[LatestCameraImageLocation]。我还需要编写一个sql脚本来循环我现有的CameraImages,找到每个摄像头的最新CameraImages,并将文件位置从CameraImages写入Cameras中的LatestCameraImageLocation列。我尝试了包括cte在内的一系列方法,但似乎无法使其发挥作用。

这取决于它的用途,可能值得重新思考一下您的模型。但严格来说,这是一个问题

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,这样循环会非常慢。此外,这听起来更像是
视图的候选对象,否则您可能会在以后声明希望
使用新的最新图像更新表(始终)。