【发布时间】:2019-06-13 23:41:24
【问题描述】:
我的表中数据如下
SELECT ID, VALUE, acc_no, adate
FROM TB_DailyStatement
id value acc_no adate
---------------------------------------------
1 12 1 2019-01-01 07:40:38.250
2 14 1 2019-01-02 07:41:05.883
3 15 1 2019-01-13 07:41:22.377
4 10 2 2019-01-14 08:15:53.403
5 16 2 2019-01-03 13:52:47.347
6 19 1 2019-01-09 13:53:56.317
7 7 3 2019-01-17 00:00:00.000
8 24 2 2019-01-17 00:00:00.000
9 19 2 2019-01-02 00:00:00.000
10 7 1 2019-01-07 00:00:00.000
11 24 1 2019-01-05 14:12:47.080
12 20 3 2019-01-28 00:00:00.000
预期结果
id value acc_no aDATE result
------------------------------------------------------------------------
1 12 1 2019-01-01 07:40:38.250 12 (current row values of acc_no=1)
2 14 1 2019-01-02 07:41:05.883 2 (14 (current row values)-12(previous row value of acc_no=1))
11 24 1 2019-01-05 14:12:47.080 10 (24 (current row values)-14(previous date value of acc_no=1))
10 7 1 2019-01-07 00:00:00.000 -17 (7 (current row values)-24(previous date value of acc_no=1))
6 19 1 2019-01-09 13:53:56.317 12 (19 (current row values)-7(previous date value of acc_no=1))
3 15 1 2019-01-13 07:41:22.377 -4 (15 (current row values)-19(previous date value of acc_no=1))
9 19 2 2019-01-02 00:00:00.000 19 (12 (current row values of acc_no=2)
5 16 2 2019-01-03 13:52:47.347 -3 (16 (current row values)-14(previous date value of acc_no=2))
4 10 2 2019-01-14 08:15:53.403 -6 (10 (current row values)-16(previous date value of acc_no=2))
8 24 2 2019-01-17 00:00:00.000 14 (24 (current row values)-10(previous date value of acc_no=2))
7 7 3 2019-01-17 00:00:00.000 7 (12(current row values of acc_no=3)
12 20 3 2019-01-28 00:00:00.000 13 (20 (current row values)-7(previous date value of acc_no=3))
我尝试了以下查询
SELECT
id, t.value, acc_no, adate,
t.value - ISNULL(v.value, 0) AS result
FROM
TB_DailyStatementt
OUTER APPLY
(SELECT TOP (1) value
FROM TB_DailyStatement
WHERE id < t.id
AND acc_no = t.acc_no
ORDER by id DESC) v
这会返回一些输出,但我无法使用 order by 子句,即 adate 和 acc_no
【问题讨论】:
-
看看
LEAD和/或LAG。 -
我试过了,但是不行
-
我没有听说过领先或滞后,但你可以直接加入同一个表,id 为 -1,所以 tbl1.id = isnull(tbl2.id, 0) - 2?
-
没关系,刚刚注意到你标记了 2008。你知道那基本上完全不支持了吧?
-
我也试过了,但我按 adate 和 acc_no 执行了订单,因为这不能正常工作
标签: c# sql sql-server sql-server-2008