Declare @ds TABLE (id int, value int, acc_no int, dt datetime)
INSERT INTO @ds
SELECT 1, 12, 1, '2019-01-01 07:40:38.250' UNION
SELECT 2, 14, 1, '2019-01-02 07:41:05.883' UNION
SELECT 3, 15, 1, '2019-01-13 07:41:22.377' UNION
SELECT 4, 10, 2, '2019-01-14 08:15:53.403' UNION
SELECT 5, 16, 2, '2019-01-03 13:52:47.347' UNION
SELECT 6, 19, 1, '2019-01-09 13:53:56.317' UNION
SELECT 7, 7, 3, '2019-01-17 00:00:00.000' UNION
SELECT 8, 24, 2, '2019-01-17 00:00:00.000' UNION
SELECT 9, 19, 2, '2019-01-02 00:00:00.000' UNION
SELECT 10, 7, 1, '2019-01-07 00:00:00.000' UNION
SELECT 11, 24, 1, '2019-01-05 14:12:47.080' UNION
SELECT 12, 20, 3, '2019-01-28 00:00:00.000'
SELECT id, value, acc_no, dt, value - previous AS result
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY DS1.id
ORDER BY DS2.dt DESC) AS rn
,DS1.*, COALESCE(DS2.value,0) AS previous
FROM @ds DS1
LEFT JOIN @ds DS2
ON DS2.acc_no = DS1.acc_no
AND DS2.dt < DS1.dt
) AS dt
WHERE rn = 1
В исходном запросе вы присоединяетесь к ID, ваши комментарии в желаемых результатах показывают, что вы хотите использовать дату для заказа, а не идентификатор.
Таким образом, вы можете исправить исходный запрос, изменив «id