2

テーブルの単一の列の値の違いを、現在の行の値と前の行の値として、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 列を取得しようとしています。私を助けてください。

前もって感謝します

4

3 に答える 3

2

あなたの記録が日付によって連続しているとすると.....

クエリ:

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
于 2013-01-09T12:05:23.990 に答える
1

これを行う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;

SQLフィドルデモ

これはあなたに与えるでしょう:

|                            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 |
于 2013-01-09T12:04:21.170 に答える
0

これを試して:

SELECT date, 
       (box_count - @diff) total_no_of_boxes_used, 
       (@diff:=box_count) box_count
FROM table1, (SELECT @diff:=0) A;

このSQLFIDDLEDEMOを確認してください

出力

|                            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 |
于 2013-01-09T12:03:46.830 に答える