首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据当前和上一行中的值计算当前行的值

根据当前和上一行中的值计算当前行的值
EN

Stack Overflow用户
提问于 2016-01-05 03:07:15
回答 1查看 148关注 0票数 1

有桌子,即。table1,它有TimeCol1Col2字段。我要做的是创建一个新的表table2,其中包括基于SQLoftable1中当前行和前一行的Col1 & Col2值计算的每一行的Col3值。所需的table2格式如下所示。

代码语言:javascript
运行
复制
table2

   Time             Col1    Col2   Col3
   09:37.43.755       1      0      0.0    #=> col3 row1 start value = 0
   09:37.44.255       5      2      0.3333 #=> (row2.col2-row1.col2)/((row2.col2-row1.col2)+(row2.col1-row1.col1)) => (2-0)/((2-0) + (5-1)) => 2/6 = 0.3333
   09:37.44.755       10     2      0.0    #=> (row3.col2-row2.col2)/((row3.col2-row2.col2)+(row3.col1-row2.col1)) => (2-2)/((2-2) + (10-5)) => 0/5 = 0.0
   09:37.45.255       10     2      0.0    # similar to row2,3 but a div by 0 case => (2-2)/( (2-2) + (10-10)) = 0/0 => this should be mapped to 0 if the numerator is 0.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 16:07:18

这里最适合您的工具可能是滞后窗口聚合函数。不过,可能有几种不同的方法可以做到这一点。下面是一个使用延迟和子查询的示例。加窗的聚合函数非常有用,所以我认为应该了解它们!

代码语言:javascript
运行
复制
select * from table1 order by time, col1;

     TIME     | COL1 | COL2
--------------+------+------
 09:37:43.755 |    1 |    0
 09:37:44.255 |    5 |    2
 09:37:44.755 |   10 |    2
 09:37:45.255 |   10 |    2
(4 rows)


select time, col1, col2,
   coalesce ( case
      when (
            col2-lag_col2
         )
         + (col1-lag_col1) = 0 then 0
      else ((col2-lag_col2)*1.0/((col2-lag_col2)+(col1-lag_col1)))::NUMERIC(5,4)
   END , 0) col3
from (
      select time, col1, col2,
         lag(col1) over (order by time, col1) lag_col1,
         lag(col2) over (order by time, col1) lag_col2
      from table1
   )
   foo;

     TIME     | COL1 | COL2 |  COL3
--------------+------+------+--------
 09:37:43.755 |    1 |    0 | 0.0000
 09:37:44.255 |    5 |    2 | 0.3333
 09:37:44.755 |   10 |    2 | 0.0000
 09:37:45.255 |   10 |    2 | 0.0000
(4 rows)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34603578

复制
相关文章

相似问题

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