我有一个看起来像这样的表:
GroupID UserID Value
1 1 10
1 2 20
1 3 30
1 4 40
1 5 45
1 6 49
1 7 80
1 8 90
2 1 2
2 2 24
2 3 34
2 4 48
2 5 56
3 1 etc.
3 2
3 3
3 4
4 1
4 2
4 3
我正在尝试编写一个LEAD函数,它会给出每个值之间的中点。为此,我写了以下内容:
SELECT
[GroupID]
, [UserID]+0.5
, (LEAD ([Value], 1) OVER (ORDER BY GroupID, UserID) + [Value])/2 as [Value]
from dbo.myTable
这个函数的问题是,当它到达组中的最后一个用户时,它给了我一个坏的值,因为它获取当前行的[Value]和下一行的值。
我想要做的是当它达到每个组的最大UserID时停止它。换句话说,当它到达GroupID = 1
和UserID = 8
时,它应该结束并从下一个组开始。我不希望看起来像这样的一行:
GroupID UserID Value
1 8.5 46
在我DELETE
行进入原始表后,我可以运行INSERT
语句,但我没有任何东西可以确定某行是"最大值&#34 ;用户为它的小组。理想情况下,我想以某种方式告诉主要声明不要首先计算它。