mysql 取差值_mysql计算两条数据差值,求大神解答

本文介绍了如何在MySQL中计算两条数据之间的差值。通过创建并填充3张表`t1`、`t1_01`和`t1_02`,然后进行JOIN操作,最后得到每个房间水表读数的差值。示例展示了如何处理多个房间的历史数据,以获取每个房间每次读数的变化情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建3张表:

CREATE TABLE `t1` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`warter` int(11) DEFAULT NULL,

`roomid` int(11) DEFAULT NULL,

`createtime` datetime DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

create table t1_01 like t1;

create table t1_02 like t1;

2.初始化数据(类似楼主的数据):

insert into t1(warter,roomid,createtime) values(100,1,””2015-02-20 14:31:57″”),(150,1,””2015-03-20 14:33:01″”),(50,2,””2015-04-20 14:34:10″”),(210,1,””2015-04-20 14:56:50″”);

mysql> select * from t1 order by roomid,createtime desc;

+—-+——–+——–+———————+

| id | warter | roomid | createtime          |

+—-+——–+——–+———————+

|  4 |    210 |      1 | 2015-04-20 14:56:50 |

|  2 |    150 |      1 | 2015-03-20 14:33:01 |

|  1 |    100 |      1 | 2015-02-20 14:31:57 |

|  3 |     50 |      2 | 2015-04-20 14:34:10 |

+—-+——–+——–+———————+

4 rows in set (0.00 sec)

mysql>

3.生成t1_01表的数据:

insert into t1_01(warter,roomid,createtime) select warter,roomid,createtime from t1 order by roomid,createtime desc;

4.生成t1_02表的数据:

insert into t1_02 select id+1 as id, warter,roomid,createtime from t1_01;

5.生成最终结果:

select t2.*,(t2.warter-t1.warter)  as warter_diff from t1_01 t1

inner join t1_02 t2

on t1.roomid=t2.roomid and t1.id=t2.id

union all

select t1.*, t1.warter as warter_diff from t1_01  t1

inner join (select min(createtime) cr,roomid from t1 group by roomid) t2

on t1.roomid=t2.roomid and t1.createtime=t2.cr;

+—-+——–+——–+———————+————-+

| id | warter | roomid | createtime          | warter_diff |

+—-+——–+——–+———————+————-+

|  2 |    210 |      1 | 2015-04-20 14:56:50 |          60 |

|  3 |    150 |      1 | 2015-03-20 14:33:01 |          50 |

|  3 |    100 |      1 | 2015-02-20 14:31:57 |         100 |

|  4 |     50 |      2 | 2015-04-20 14:34:10 |          50 |

+—-+——–+——–+———————+————-+

4 rows in set (0.00 sec)

mysql>

注:t1_01和t1_02表在多并发情况下,可以采用临时表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值