У меня есть база данных, которая, simiplified, заключается в следующем:Обновление столбца с самой ранней датой, которая имеет тот же идентификатор, и имеет столбец> 0
ID | SecondID | DateRecorded | NumberToCheck | NumberToUpdate
NumberToUpdate
в настоящее время имеет значение 0 для всех строк.
Я хочу, чтобы обновить NumberToUpdate
со значением для NumberToCheck
на той же строке, МИНУС значение для NumberToCheck
, который имеет самый ранний DateRecorded
«(Min(DateRecorded)
», где NumberToCheck
больше 0, и который имеет тот же идентификатор и secondID как оригинал ряд.
До сих пор я
UPDATE dbo.Table
SET NumberToUpdate =//Update NumberToUpdate
NumberToCheck - //NumberToCheck from the current row, subtracting...
(SELECT TOP 1 t2.NumberToCheck FROM Table t2 WHERE ID = t2.ID AND secondID = t2.secondID AND t2.DateRecorded =
(SELECT TOP 1 MIN(t3.DateRecorded) FROM Table t3 WHERE t2.ID = t3.ID AND t2.secondID = t3.secondID AND t3.Passes > 0))
//the NumberToCheck with the earliest date, of the same ID.
Это не правильно, однако, и возвращает меня значения, которые не имеют смысла (в том числе значений минус которого не должно быть никакого!)
Что есть Я забыл здесь?
Большое спасибо
1-я догадка: если вы берете первый NumbertoCheck, который отличен от нуля и отбрасывает его из некоторых ранних строк, имеющих нулевое значение, вы, вероятно, получите некоторые отрицательные числа. Возможно, вы не захотите их обновлять. – Bill
Нет, не было бы отрицательных значений, поскольку число является кумулятивным :) –
Обновление: теперь я добавил еще один столбец к моему примеру, что усложняет его. Мне нужно сопоставить как ID, так и SecondID в моем обновлении. До сих пор ни один из ответов не работал правильно для меня. –