2014-01-21 4 views
1

Привет У меня есть следующий запрос, который показывает следующие результаты:Разница между результатами MySQL

SELECT 
    meter.meter_serial, 
    her060.node_address, 
    her060.report_time, 
    her060.node_reading 
FROM 
    meter, 
    her060 
WHERE meter.node_address = her060.node_address 
    AND meter.meter_serial = '31602193' 
ORDER BY her060.report_time DESC 
LIMIT 10 

и результаты хорошо:

meter_serial node_address report_time   node_reading 
31602193 10164d995147 10/01/2014 0:36   777 
31602193 10164d995147 8/01/2014 18:22   763 
31602193 10164d995147 7/01/2014 6:04   724 
31602193 10164d995147 6/01/2014 12:19   698 
31602193 10164d995147 4/01/2014 23:55   669 
31602193 10164d995147 3/01/2014 11:30   650 
31602193 10164d995147 1/01/2014 23:06   624 
31602193 10164d995147 31/12/2013 10:41   624 
31602193 10164d995147 29/12/2013 22:17   624 
31602193 10164d995147 28/12/2013 9:53   624 

Но я хотел бы добавить еще один столбец, который вычисляет разница между узлами_подробней.

Может кто-нибудь предложить, что делать?

прощаю Также мое форматирование это мой первый вопрос :)

Спасибо заранее

+0

вы имеете в виду разницу в node_reading между различными рядами? – cardeol

+0

Разница между node_readings означает разницу между текущим и предыдущим nod_reading? –

+0

Как сделать расчет? – BenM

ответ

1
SELECT 
    meter.meter_serial, 
    her060.node_address, 
    her060.report_time, 
    her060.node_reading, 
    @previous - node_reading AS your_difference, /*here the variable holds the value of the previous row*/ 
    @previous := node_reading /*here the variable gets assigned the value of the current row*/ 
FROM 
    meter 
INNER JOIN her060 ON meter.node_address = her060.node_address 
CROSS JOIN (SELECT @previous := (SELECT node_reading FROM her060 ORDER BY report_time DESC LIMIT 1)) variable_initialization_query_alias 
WHERE 
    meter.meter_serial = '31602193' 
ORDER BY her060.report_time DESC 
LIMIT 10 
+0

Это выглядит очень близко, но я думаю, что чего-то не хватает. когда я запускаю его, я получаю одинаковое значение как в node_reading, так и в предыдущем, что также означает, что я получаю NULL в вашей_диффузии – RyanGest

+0

Простой ':' отсутствовал, исправил его. Пожалуйста, попробуйте еще раз. – fancyPants

+0

Ницца отлично работает благодаря кучам за вашу помощь – RyanGest

0

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

**SELECT meter.meter_serial, 
    her060.node_address, 
    her060.report_time, 
    her060.node_reading , 
    a.node_reading -b.node_reading 
FROM 
    meter, 
    her060 a 
inner join 
her060 
on a.id = b.id -1 
WHERE meter.node_address = her060.node_address 
    AND meter.meter_serial = '31602193' 
ORDER BY her060.report_time DESC 
LIMIT 10** 
+1

нет возможности использовать автоматическое приращение, потому что в таблице есть другой метр_сериал и никоим образом зная, в каком порядке они входят – RyanGest

Смежные вопросы