MySQL вычитать поле с полем перед - PullRequest
0 голосов
/ 15 декабря 2018

Я хочу вычесть два значения, текущее значение и значение из строки перед текущим значением для каждого значения, в основном создав новую таблицу только с этими новыми значениями, чтобы я мог усреднить их поздно.

Структура таблицы выглядит следующим образом:

-----------------------
id | keyTime   | millis| 
------------------------
1  | 22:00:00  | 10  | 
2  | 22:05:00  | 20  |
3  | 22:10:00  | 30  | 
4  | 22:15:00  | 40  |

И я хотел бы вычесть так:


id | dif    |
-------------
1  | 10-0   | 
2  | 20-10  |
3  | 30-20  | 
4  | 40-30  |

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Я думаю, что левое соединение будет лучшим решением (если ваши идентификаторы всегда будут последовательными)

SELECT `t`.`id`,`t`.`millis`-COALESCE(`t2`.`millis`,0) AS `diff`
FROM `t`
LEFT JOIN `t` AS `t2` ON `t2`.`id` = `t`.`id`-1

В противном случае, я бы использовал подзапрос

SELECT `id`,`millis` - COALESCE((SELECT `millis` FROM `t` AS `t2` WHERE `id` < `t`.`id` ORDER BY `id` DESC LIMIT 1),0) AS `diff`
FROM `t`
0 голосов
/ 15 декабря 2018

Вы можете использовать коррелированный подзапрос:

select t.*, (millis - coalesce(prev_millis, 0)) as diff
from (select t.*,
             (select t2.millis
              from t t2
              where t2.keyTime < t.keyTime
              order by t2.keyTime desc
              limit 1
             ) as prev_millis
      from t
     ) t;

Это предполагает, что id ненадежен.С указанными вами значениями id вы можете просто использовать left join.

...