0

私のテーブルは次のようになっています:

unix_timestap   ID  value
1351058019      1   500
1351058029      1   505
1351058039      9   105
1351058049      9   200
1351076620      1   520

現在の値と最初に利用可能な「過去」の値の間のIDごとの値の違いを含む新しい列を生成できるようにしたいと思います。過去とは、unixtimestamp が元のテーブルに順番に配置されていないことを意味します。

出力は次のようになります。

unix_timestap   ID  value    difference
1351058019      1   500      0
1351058029      1   505      5
1351058039      9   105      0
1351058049      9   200      95
1351076620      1   520      15

以前の unix_timestamp が存在しない場合、値はゼロにする必要があります。

ヒント/ヒントをいただければ幸いです。ありがとう

4

1 に答える 1

0

解決策がまだ必要な場合

select
  t3.unix_timestamp, t3.id, t3.value, ifnull(t3.value - t5.value, 0) as diff
from test1 t3
  join (
        SELECT t1.unix_timestamp, t1.id, max(t2.unix_timestamp) as old_stamp
        FROM `test1` t1
          left join test1 t2 on t1.id = t2.id and t1.unix_timestamp > t2.unix_timestamp
        group by t1.unix_timestamp, t1.id) as t4
  on t3.unix_timestamp = t4.unix_timestamp and t3.id = t4.id
left join test1 t5 on t4.old_stamp = t5.unix_timestamp and t4.id = t5.id
于 2013-02-22T01:20:53.313 に答える