mysql - 减去行以显示MySql中的差异
问题描述
我创建了一个表格,在其中记录每天的计时表读数。我需要从一天到另一天减去总仪表读数以显示每日运行时间。
这是一个 DB fiddle 什么对一行有效:db fiddle
我的表如下所示:
INSERT INTO `cuidadrun` (`cuidad_id`, `date`, `bc100a`, `bc100b`, `bc100c`, `bc100d`, `bc100e`) VALUES
(1, '2018-10-18', 500, 500, 500, 500, 500),
(2, '2018-10-19', 518, 520, 520, 520, 520),
(3, '2018-10-20', 539, 540, 540, 540, 540),
(4, '2018-10-21', 558, 560, 560, 560, 560);
COMMIT;
---
**Query #1**
SELECT date,
COALESCE(m1.bc100a - (SELECT m2.bc100a FROM cuidadrun m2 WHERE m2.cuidad_id = m1.cuidad_id - 1), 0) AS diffBC100a
FROM cuidadrun m1;
结果:
| date | diffBC100a |
| ---------- | ---------- |
| 2018-10-18 | 0 |
| 2018-10-19 | 18 |
| 2018-10-20 | 21 |
| 2018-10-21 | 19 |
我的目标是在下表中显示每个仪表的每日小时数。
| date | diffBC100a | diffBC100b | diffBC100c | diffBC100d | diffBC100e |
| ---------- | ---------- | ---------- | ---------- | ---------- | ---------- |
| 2018-10-18 | 0 | 0 | 0 | 0 | 0 |
| 2018-10-19 | 18 | 20 | 20 | 20 | 20 |
| 2018-10-20 | 21 | 20 | 20 | 20 | 20 |
| 2018-10-21 | 19 | 20 | 20 | 20 | 20 |
我不知道我怎么能做到这一点。
解决方案
id
而不是子查询,我会对前一个值行执行“Self-Left-Join” 。
SELECT m1.date,
COALESCE(m1.bc100a - m2.bc100a, 0) AS diffBC100a,
COALESCE(m1.bc100b - m2.bc100b, 0) AS diffBC100b,
COALESCE(m1.bc100c - m2.bc100c, 0) AS diffBC100c,
COALESCE(m1.bc100d - m2.bc100d, 0) AS diffBC100d,
COALESCE(m1.bc100e - m2.bc100e, 0) AS diffBC100e
FROM cuidadrun AS m1
LEFT JOIN cuidadrun AS m2
ON m2.cuidad_id = m1.cuidad_id - 1
ORDER BY m1.date
结果
| date | diffBC100a | diffBC100b | diffBC100c | diffBC100d | diffBC100e |
| ---------- | ---------- | ---------- | ---------- | ---------- | ---------- |
| 2018-10-18 | 0 | 0 | 0 | 0 | 0 |
| 2018-10-19 | 18 | 20 | 20 | 20 | 20 |
| 2018-10-20 | 21 | 20 | 20 | 20 | 20 |
| 2018-10-21 | 19 | 20 | 20 | 20 | 20 |
推荐阅读
- python - 以安全的方式从字典数据创建表
- c - 将 #define 传递给 void * 函数
- azure - 如何将 Azure DevOps Pipeline 连接到新的应用服务?
- javascript - 如何在 Firestore 集合中查询具有特定属性的对象,Firebase
- laravel - 如何在我的组件 VueJS 上添加按钮计数
- ios - 当通过点击背景关闭 UITextView 的键盘时,我在 didSelectRowAt 中得到错误的 indexPath
- kubernetes - kubectl 不显示用户名/密码?
- c - 格式化字符串攻击,将输出转换为 bash 中的可读格式
- javascript - 带有`fetch`的React-Native上传文件不起作用
- python - 在一行而不是多行中获取编码的分类变量