2013-02-15 77 views
2

我有一个名为LOGENTRY的简单表,其中包含名为“DATE”和“COST”的字段。例如:单个字段(最适合的行)的MySQL斜率(趋势)

+--------------+-------+ 
| DATE   | COST | 
+--------------+-------+ 
| MAY 1 2013 | 0.8 | 
| SEP 1 2013 | 0.4 | 
| NOV 1 2013 | 0.6 | 
| DEC 1 2013 | 0.2 | 
+--------------+-------+ 

我想找到成本场随时间的斜率(的范围内选择的行),导致 SLOPE = -0.00216(这相当于Excel的SLOPE函数,又名线性回归) 。

有没有简单的方法来选择成本的斜率?如果我做数学在调用语言(PHP)我能找到的斜率:

SLOPE = (N * Sum_XY - Sum_X * Sum_Y)/(N * Sum_X2 - Sum_X * Sum_X); 

我看到贴一些类似的问题,但他们更复杂。我试图剥离这个例子到最简单的情况 - 所以我可以理解答案:)这里是尽可能接近...但MYSQL抱怨附近的语法: 'float))AS Sum_X,SUM(CAST (LOGENTRY.DATE为float)* CAST(LOGENTRY.DATE”

SELECT 
    COUNT(*) AS N, 
    SUM(CAST(LOGENTRY.DATE AS FLOAT)) AS Sum_X, 
    SUM(CAST(LOGENTRY.DATE AS FLOAT) * CAST(LOGENTRY.DATE AS FLOAT)) AS Sum_X2, 
    SUM(LOGENTRY.COST) AS Sum_Y, SUM(LOGENTRY.COST * LOGENTRY.COST) AS Sum_Y2, 
    SUM(CAST(LOGENTRY.DATE AS FLOAT) * LOGENTRY.COST) AS Sum_XY 
FROM LOGENTRY 
+0

与此信息no人们可以回答。当你发布一个问题,请发布样本数据,结构和期望的输出 – 2013-02-15 17:13:00

+0

可能的重复:http://stackoverflow.com/questions/9084761/how-to-calculate-the-slope-in​​-sql – sgeddes 2013-02-15 17:16:54

+0

我看到张贴9084761但它更复杂(附加字段KEYWORD)。我试图保持简单,所以我和其他人可以更好地理解它。 – TSG 2013-02-15 17:23:18

回答

4

看来,MySQL不能施放日期为float(按计算器中的其他例子)。也许其他的例子涉及到另一个数据库。因此,通过将日期转换为unix_timestamps,我能够得到一个答案...在PHP中的最终计算。如果这是错误...请发布,我将删除答案...

SELECT 
     COUNT(*) AS N, 
     SUM(UNIX_TIMESTAMP(LOGENTRY.DATE)) AS Sum_X, 
     SUM(UNIX_TIMESTAMP(LOGENTRY.DATE) * UNIX_TIMESTAMP(LOGENTRY.DATE)) AS Sum_X2, 
     SUM(LOGENTRY.COST) AS Sum_Y, 
     SUM(LOGENTRY.COST*LOGENTRY.COST) AS Sum_Y2, 
     SUM(UNIX_TIMESTAMP(LOGENTRY.DATE) * LOGENTRY.COST) AS Sum_XY 
    FROM LOGENTRY 
+0

这并不太糟糕,尽管检查你的数据以确保你得到一个很好的答案。 – Orbling 2013-02-15 18:03:09