Я рассчитываю рассчитывать разницу между весами моих загруженных грузовиков каждый день. По сути, я хочу знать, какие суммы добавляются каждый день. Теоретически, грузовики будут работать ежедневно, но я использую упрощенный набор данных в своей фиктивной базе данных.
Вот код, который я придумал:
--create table dbo.truck
--(TruckID int, Weight float, datetrunc date, weightdiff float)
declare @dt1 datetime, @dt2 datetime
select @dt2 = max(datetrunc) from truck
select @dt1 = max(datetrunc) from truck where datetrunc < @dt2
select @dt1 [dt1], @dt2 [dt2]
SELECT t1.truckid, t2.weight - t1.weight [WeightDiff]
FROM truck t1
inner join truck t2 ON t1.truckid = t2.truckid
WHERE t1.datetrunc = @dt1
AND t2.datetrunc = @dt2
UPDATE truck SET WeightDiff = x.WeightDiff
FROM (
SELECT t1.truckid, t2.weight - t1.weight [WeightDiff]
FROM truck t1
inner join truck t2 ON t1.truckid = t2.truckid
WHERE t1.datetrunc = @dt1
AND t2.datetrunc = @dt2
) AS X
WHERE truck.datetrunc = @dt2
AND x.truckid = truck.truckid
SELECT t1.truckid, @dt2, t2.weight - t1.weight
FROM truck t1
inner join truck t2 ON t1.truckid = t2.truckid
WHERE t1.datetrunc = @dt1
AND t2.datetrunc = @dt2
Я надеюсь на разницу между показанными датами. Тем не менее, разница между последними датами отображается только при удалении, а остальные строки удаляются и обнуляются:
TruckID Weight datetrunc weightdiff
1 1000 2019-03-01 NULL
2 1111 2019-03-01 NULL
3 1222 2019-03-01 NULL
1 1050 2019-03-15 NULL
2 1700 2019-03-15 NULL
3 1400 2019-03-15 NULL
1 1125 2019-03-31 75
2 1725 2019-03-31 25
3 1600 2019-03-31 200
Я хочу:
TruckID Weight datetrunc weightdiff
1 1000 2019-03-01 NULL
2 1111 2019-03-01 NULL
3 1222 2019-03-01 NULL
4 1400 2019-03-01 NULL
1 1050 2019-03-15 50
2 1700 2019-03-15 589
3 1400 2019-03-15 178
4 1490 2019-03-15 90
1 1125 2019-03-31 75
2 1725 2019-03-31 25
3 1600 2019-03-31 200
4 1900 2019-03-31 510
Обратите внимание, что некоторые TruckID 4 были завершены, удалены из моего набора данных. Кроме того, как он заменяет разницу в весе.
Я не могу понять, как заставить мои данные отображаться правильно. Любые предложения помогите, спасибо!