首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在Server中以级联方式使用行中的数据计算值?

是否可以在Server中以级联方式使用行中的数据计算值?
EN

Stack Overflow用户
提问于 2016-01-18 12:43:20
回答 1查看 33关注 0票数 0

下面是我表中的数据。我需要计算特定位置下一行的MINMAXPOINTS之间的差异,如果为正,则将输出记录为1,如果为负值,则将输出记录为0,然后将所有输出值加到本地声明的变量中。

代码语言:javascript
复制
Id  Date    Position    MINMAXPOINTS
1   1/11/2016   ABOVE   82.4
2   1/5/2016    ABOVE   81.75
3   12/1/2015   ABOVE   72.79
4   10/28/2015  ABOVE   76.7
5   10/20/2015  ABOVE   80
6   1/15/2016   BELOW   68.4
7   1/7/2016    BELOW   72.29
8   12/14/2015  BELOW   61.25
9   11/10/2015  BELOW   60.89
10  10/27/2015  BELOW   73.29
11  9/4/2015    BELOW   54.35

以上数据由PARTITION编辑,Position编辑,ORDER编辑Date DESC编辑。

代码语言:javascript
复制
ROW_NUMBER() OVER (PARTITION BY CTE_MinMax.Position ORDER BY [Date] DESC) AS MINMAXPOINTS

所以算法是这样的:

  • 计算每一行的MINMAXPOINTS差之和,如:(1-2) + (2-3) + (3-4) + (4-5),'ABOVE'为(6-7) + (7-8) + (8-9) + (9-10) + (10-11)。
  • 根据上述差异中每个数的符号,我们得到:(1) + (1) + (-1) + (-1) + (-1) + (-1) 'ABOVE',(-1)+ (1) + (1) +(-1)+(-1)+ (1) 'BELOW'
  • 接下来,我们将'ABOVE''BELOW'的所有值相加,并将1存储为本地声明变量中的总计。

在上面的场景中,减数应该是可配置的。因此,如果我输入2,那么只有2对Positions应该被总结如下:

(1-2) + (2-3)用于'ABOVE',(6-7) + (7-8)用于'BELOW'

导致了总计的3

如果只使用- WITH CTEs或其他东西,而不使用游标,或者在可能的情况下不创建任何表,那就太棒了。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2016-01-18 13:45:33

代码语言:javascript
复制
WITH temp
AS
(
    SELECT *, ROW_NUMBER() OVER(ORDER BY Position, Date) AS srn 
    FROM Table1 
), 
temp1
AS
(
    SELECT t.*, ROW_NUMBER() OVER(PARTITION BY Position ORDER BY srn) AS srn1
    FROM
    (
        SELECT t1.*, (t1.MINMAXPOINTS - t2.MINMAXPOINTS) AS Diff
        FROM temp t1 
        LEFT JOIN temp t2
        ON t1.srn = t2.srn - 1 AND t1.Position = t2.Position    
    )t
)
SELECT Position, SUM(Diff)
FROM temp1
WHERE 
srn1 <= 2 -- 3, 4 any number upto which you need to calculate total
GROUP BY Position 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34855105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档