首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL模拟Pandas diff()函数(第1离散差分)[滞后函数]

SQL模拟Pandas diff()函数(第1离散差分)[滞后函数]
EN

Stack Overflow用户
提问于 2018-01-09 09:13:59
回答 2查看 907关注 0票数 2

我正在寻找一种方法来编写SQL查询,将第一个离散的差异应用于最初的系列。通过使用Pandas的.diff()方法,在Python中这是非常容易的:

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(10, 2)), columns=list('AB'))

df["diff_A"]=df["A"].diff()
df["diff_B"]=df["B"].diff()

print(df)

我想要的输出在"diff_A""diff_B"列中演示:

代码语言:javascript
代码运行次数:0
运行
复制
    A   B  diff_A  diff_B
0  36  14     NaN     NaN
1  32  13    -4.0    -1.0
2  31  87    -1.0    74.0
3  58  88    27.0     1.0
4  44  34   -14.0   -54.0
5   2  43   -42.0     9.0
6  15  94    13.0    51.0
7  46  74    31.0   -20.0
8  60   9    14.0   -65.0
9  43  57   -17.0    48.0

我使用Oracle,但我肯定更喜欢干净的ANSI解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-09 09:23:49

您可以使用解析迟滞函数:

代码语言:javascript
代码运行次数:0
运行
复制
with v as (
  select rowid as rn, a, b from tab
)
select
  a, b,
  a - lag(a, 1) over(order by rn) as diff_a,
  b - lag(b, 1) over(order by rn) as diff_b
from v
order by rn;

PS使用一个真正的列(如日期)来排序要好得多,因为可以改变

例如:

代码语言:javascript
代码运行次数:0
运行
复制
select
  a, b,
  a - lag(a, 1) over(order by inserted) as diff_a,
  b - lag(b, 1) over(order by inserted) as diff_b
from tab;

@MatBailie发布了一个很好的解释

SQL中的数据集是无序的.对于滞后()中的确定性结果,始终使用充分的ORDER子句。(如果不存在此类字段,则应在插入到SQL数据集中的数据时/之前创建一个字段。SQL数据集的无序特性允许大量的可伸缩性选项和优化选项可用。)

SQL Fiddle测试

PS 窗口功能被添加到ANSI/ISO标准SQL:2003中,然后在ANSI/ISO标准SQL:2008中进行扩展。微软在这场游戏中迟到了。DB2、Oracle、Sybase、PostgreSQL和其他产品已经完全实现多年了。Server直到SQL 2012才赶上。

票数 2
EN

Stack Overflow用户

发布于 2018-01-09 10:10:13

我之所以发布这个答案,仅仅是因为我能够在一个SQLFiddle中复制结果,然后是在接受的答案中的注释。除了rowid改变后的事实,是否有一个有效的论点,为什么这个简单的答案不起作用。

代码语言:javascript
代码运行次数:0
运行
复制
select
  a, b,
  a - lag(a, 1) over(order by rowid) as diff_a,
  b - lag(b, 1) over(order by rowid) as diff_b
from tab;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48164751

复制
相关文章

相似问题

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