Обновить столбец в SQL Server 2008

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

введите описание изображения здесь

Я пробовал этот запрос:

update Machine_Data set BreakTime = (select DATEDIFF(SECOND, M2.Time, M1.Time) as BreakTime from Machine_Data M1 join Machine_Data M2 on M1.DocEntry = M2.DocEntry + 1) 

но это порождает ошибку

Подзапрос возвратил более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется как выражение.

Поскольку у вас есть номера строк в таблице, вы можете самостоятельно присоединиться к UPDATE чтобы правильно UPDATE время. Обратите внимание, что условие соединения заключается в том, что текущий DocEntry должен совпадать с DocEntry в таблице соединения.

 UPDATE t1 SET BreakTime = DATEDIFF(SECOND, t1.Time, COALESCE(t2.Time, t1.Time)) FROM Machine_Data t1 INNER JOIN Machine_Data t2 ON t1.DocEntry = t2.DocEntry - 1 

Еще одна заметка заключается в том, что вызов COALESECE() обрабатывает COALESECE() край последней записи в таблице (как отсортировано по возрастанию DocEntry ). В этом случае он не будет соответствовать какой-либо записи, поэтому в этом случае я хочу указать нуль для времени разрыва.

Если ваш столбец BreakTime является типом Time , вы можете просто использовать DATEADD() для установки времени:

 SET BreakTime = DATEADD(SECOND, DATEDIFF(SECOND, t1.Time, COALESCE(t2.Time, t1.Time)), '00:00:00') 
 update Machine_Data set BreakTime = (select MAX(DATEDIFF(SECOND,M2.Time,M1.Time)) as BreakTime from Machine_Data M1 join Machine_Data M2 on M1.DocEntry =M2.DocEntry+1) 
Interesting Posts

Параметрированный запрос '(@lastName nvarchar (4000), @ firstName nvarchar (4000), @ middleName' ожидает параметр '@lastName', который не был указан

Ошибка SQL Server 2016 sp_execute_external_script с интеграцией R

Как остановить EF от создания бесполезного кода, не имеет значения?

Должен объявить скалярную переменную в команде Select

Как конвертировать поле для отображения даты и времени в SQL

Последние 6 месяцев дублируют записи в SQL Server с помощью t-sql?

Интеграция сервера Spring + Hibernate + Sql с поддержкой unicode

Что происходит с таблицей SQL Server 2005 с идентификатором (int), который распространяется на maxint?

SQL. Могу ли я передать переменную, которая будет использоваться в инструкции FROM?

Имена столбцов в каждой таблице должны быть уникальными

Объединение с кодировкой FOR XML

Сортировка с помощью sql

Не удалось загрузить файл или сборку «VSLangProj80»

Что этот символ (<>) делает для этого оператора select?

Инструмент сравнения схем базы данных SS Analysis Services (SSAS)?

Давайте будем гением компьютера.