MySQL单字段斜率(趋势)(最佳拟合线)

标签 mysql select trend

我有一个名为 LOGENTRY 的简单表,其中包含名为“DATE”和“COST”的字段。示例:

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

我想找到 COST 字段随时间的斜率(选定的行范围),从而得出 SLOPE=-0.00216(这相当于 Excel 的 SLOPE 函数,又名线性回归)。

有没有一种简单的方法来选择 COST 的斜率?如果我用调用语言(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 as 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

最佳答案

MySQL 似乎无法将日期转换为浮点型(按照 stackoverflow 中的其他示例)。也许其他示例引用了另一个数据库。因此,通过将日期转换为 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

关于MySQL单字段斜率(趋势)(最佳拟合线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14899823/

相关文章:

mysql - 如果父表记录满足条件,则更改子表中的值

mysql - 我不明白如何从下表中得到预期结果

更新语句中的 MySQL 分号导致语法错误

MySQL 慢查询 - 排序依据

select - 禁用属性不适用于选择标签上的必需属性

mysql - 将 MySql 查询转换为 Cakephp 2.6

php - mysql_fetch_array() 期望参数 1 为资源、给定的 bool 值和一个

mysql - 当值高于先前值时选择范围

algorithm - Google Trends的系统设计?

twitter - Twitter 热点话题提取