Обновление нескольких строк с использованием подзапроса в SQL - PullRequest
3 голосов
/ 18 ноября 2011

У меня есть сводная таблица возврата данных из основной таблицы. Я пытаюсь обновить некоторые сводные данные из значений в основной таблице следующим образом:

update #summary
  set TopSpeed = CD.TopSpeed, SpeedTime = CD.TimeSent, SpeedDriver = CD.Driver
from
(
  select top 1 TopSpeed, TimeSent, Driver
  from CarData
  where CarData.VehicleId = #summary.VehicleId 
  and CarData.TimeSent between #summary.Start and #summary.Stop
  order by CarData.TopSpeed desc, TimeSent desc
) as CD

Временная таблица #summary создает сводные данные о поездках на автомобиле. Для каждой машины может быть несколько поездок, каждая из которых имеет время начала и окончания. Таблица CarData содержит все подробные данные автомобиля, такие как скорость и положение и т. Д.

Пожалуйста, вы можете помочь?

Спасибо, Роберт

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Попробуйте это:

UPDATE
    #summary
SET
    #summary.TopSpeed = CarData.TopSpeed ,
    #summary.SpeedTime = CarData.SpeedTime 
    ...
FROM
    #summary
INNER JOIN
    CarData
ON
    #summary.id = CarData.id AND (CarData.TimeSent BETWEEN #summary.Start AND #summary.Stop)
0 голосов
/ 18 ноября 2011

Где вот способ сделать это, хотя мне не нравится делать подзапрос 3 раза.Это один из тех случаев, когда я надеюсь, что у кого-то есть идея получше.

update #summary
  set TopSpeed = 
  (
      select top 1 TopSpeed
      from CarData
      where CarData.VehicleId = #summary.VehicleId 
      and CarData.TimeSent between #summary.Start and #summary.Stop
      order by CarData.TopSpeed desc, TimeSent desc
  ) 
  SpeedTime = 
  (
      select top 1 SpeedTime
      from CarData
      where CarData.VehicleId = #summary.VehicleId 
      and CarData.TimeSent between #summary.Start and #summary.Stop
      order by CarData.TopSpeed desc, TimeSent desc
  ) 
  SpeedDriver = 
  (
      select top 1 SpeedDriver
      from CarData
      where CarData.VehicleId = #summary.VehicleId 
      and CarData.TimeSent between #summary.Start and #summary.Stop
      order by CarData.TopSpeed desc, TimeSent desc
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...