根据该数据的第二高记录更新记录

时间:2017-09-20 04:34:50

标签: sql sql-server

Sr  Na  Ra  Min    Max
1   cg  1   0.00    0.00
2   sg  1   0.00    0.00
3   cg  2   10.00   0.00
4   sg  2   10.00   0.00
5   cg  3   100.00  0.00
6   sg  3   100.00  0.00
7   cg  4   1000.00 0.00
8   sg  4   1000.00 0.00

需要输出

Sr  Na  Ra  Min     Max
1   cg  1   0.00    9.00
2   sg  1   0.00    9.00
3   cg  2   10.00   99.00
4   sg  2   10.00   99.00
5   cg  3   100.00  999.00
6   sg  3   100.00  999.00
7   cg  4   1000.00 0.00
8   sg  4   1000.00 0.00

最大cloumn需要根据最大值列更新的Ra组最小值第二最高值-1进行更新。

1 个答案:

答案 0 :(得分:1)

一种方法是对表进行更新自联接。连接条件是当前Ra值比Ra值小1,该值来自我们想要取最小值减去1的行。这很好用,因为最终的Ra值不会加入任何东西,所以它的最大值将保持为零。

WITH cte AS (
    SELECT DISTINCT Ra, Min
    FROM yourTable
)

UPDATE t1
SET t1.Max = t2.Min - 1
FROM yourTable t1
INNER JOIN cte t2
    ON t1.Ra = t2.Ra - 1;

我们也可以在这里使用LEADLAG,但这更大程度上取决于您使用的SQL Server版本,您从未告诉过我们。