テーブルの単一の列の値の違いを、現在の行の値と前の行の値として、1つの列のいくつかの「n」行の値として見つける必要があり、インクリメントの参照として使用するIDもありません
日付: box_count : total_no_of_boxes_used
1/12/12 2 2
2/12/12 8 6
3/12/12 14 6
box_count 列があり、total_no_of_boxes_used 列を取得しようとしています。私を助けてください。
前もって感謝します
あなたの記録が日付によって連続しているとすると.....
クエリ:
select a.date, a.bc, case when (a.bc-b.bc) is null then a.bc else a.bc-b.bc end tot
from tt a
left join
tt b
on a.date > b.date
group by b.date
;
結果:
DATE BC TOT
December, 01 2012 00:00:00+0000 2 2
December, 02 2012 00:00:00+0000 8 6
December, 03 2012 00:00:00+0000 14 6
December, 04 2012 00:00:00+0000 23 9
これを行う1つの方法は、次のような相関サブクエリを使用することです。
SELECT
t1.`date`,
t1.box_count,
t1.box_count -
IFNULL((SELECT t2.box_count
FROM table1 t2
WHERE t2.`date` < t1.`date`
ORDER BY t2.`date` DESC
LIMIT 1),
0 ) AS total_no_of_boxes_used
FROM table1 t1;
これはあなたに与えるでしょう:
| DATE | BOX_COUNT | TOTAL_NO_OF_BOXES_USED |
------------------------------------------------------------------------
| January, 12 2012 00:00:00+0000 | 2 | 2 |
| February, 12 2012 00:00:00+0000 | 8 | 6 |
| March, 12 2012 00:00:00+0000 | 14 | 6 |
これを試して:
SELECT date,
(box_count - @diff) total_no_of_boxes_used,
(@diff:=box_count) box_count
FROM table1, (SELECT @diff:=0) A;
出力
| DATE | TOTAL_NO_OF_BOXES_USED | BOX_COUNT |
------------------------------------------------------------------------
| January, 12 2012 00:00:00+0000 | 2 | 2 |
| February, 12 2012 00:00:00+0000 | 6 | 8 |
| March, 12 2012 00:00:00+0000 | 6 | 14 |