【发布时间】:2012-02-23 11:31:29
【问题描述】:
我在 sql 数据库中有一些数据,我想计算斜率。数据有这样的布局:
Date | Keyword | Score
2012-01-10 | ipad | 0.12
2012-01-11 | ipad | 0.17
2012-01-12 | ipad | 0.24
2012-01-10 | taco | 0.19
2012-01-11 | taco | 0.34
2012-01-12 | taco | 0.45
我希望通过使用 SQL 创建一个新表,最终输出看起来像这样:
Date | Keyword | Score | Slope
2012-01-10 | ipad | 0.12 | 0.06
2012-01-11 | ipad | 0.17 | 0.06
2012-01-12 | ipad | 0.24 | 0.06
2012-01-10 | taco | 0.19 | 0.13
2012-01-11 | taco | 0.34 | 0.13
2012-01-12 | taco | 0.45 | 0.13
更复杂的是,并非所有关键字都有 3 个日期的数据,例如有些只有 2 个。
SQL 越简单越好,因为我的数据库是专有的,我不太确定有哪些公式可用,尽管我知道如果有帮助的话它可以做 OVER(PARTITION BY)。谢谢!
更新:我将斜率定义为最适合 y=mx+p 在 excel 中也就是 =slope()
这是我通常在 excel 中操作的另一个实际示例:
date keyword score slope
1/22/2012 water bottle 0.010885442 0.000334784
1/23/2012 water bottle 0.011203949 0.000334784
1/24/2012 water bottle 0.008460835 0.000334784
1/25/2012 water bottle 0.010363991 0.000334784
1/26/2012 water bottle 0.011800716 0.000334784
1/27/2012 water bottle 0.012948411 0.000334784
1/28/2012 water bottle 0.012732459 0.000334784
1/29/2012 water bottle 0.011682568 0.000334784
【问题讨论】:
-
看看这个关于 SQL 中线性回归的问题。 stackoverflow.com/questions/2536895/…
-
@datayoda - 你如何定义斜率?如果您有两个以上的数据点,您是否只是从最早点到最新点的斜率?还是您想在所有点之间画一条最佳拟合线?如果是这样,使用线性最小二乘法或其他算法?您是否要强制直线达到某一点(知道这会降低整体拟合优度)?
-
Oracle中有一些线性回归函数。 docs.oracle.com/cd/B10501_01/server.920/a96540/…
-
我没有可用的 regr_slope :(
-
@NWest 是正确的,你需要使用线性回归,他的第一个链接似乎相当不错。一个简单的
y = mx + c不会像您的数据点那样起作用,并且极不可能形成完美的“曲线”。还要记住,只有 2-3 个数据点,你的曲线无论如何都会相当不准确。