2

「DATE」と「COST」というフィールドを持つ LOGENTRY という単純なテーブルがあります。例:

+--------------+-------+
| 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
4

1 に答える 1

4

MySQL は日付を float としてキャストできないようです (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
于 2013-02-15T17:50:23.387 に答える