Mysql验证数据的常用程序
2023-09-14 09:13:14 时间
Mysql验证数据的常用SQL
问题一
1.1问题描述
如果有一个设备,其变动关系呈之字形,也就是说,其上一条记录的start_date
= 该设备的下一条记录的end_date
。但是如何验证这个start_date与end_date直接的变化是连续的呢?请看下面一条数据:
mysql> select pit_key,device_key,device_id,start_date,end_date from pit_device_shop_temp where end_date = '9999-12-31' limit 1;
+---------+------------+--------------+---------------------+---------------------+
| pit_key | device_key | device_id | start_date | end_date |
+---------+------------+--------------+---------------------+---------------------+
| 1 | 7 | 00S92HEA2SD1 | 2018-05-01 00:00:00 | 9999-12-31 00:00:00 |
+---------+------------+--------------+---------------------+---------------------+
1 row in set (0.00 sec)
查询这个device_key所对应的所有device的记录 ,如下所示:
mysql> select pit_key,device_key,device_id,start_date,end_date from pit_device_shop_temp where device_key = 7;
+---------+------------+--------------+---------------------+---------------------+
| pit_key | device_key | device_id | start_date | end_date |
+---------+------------+--------------+---------------------+---------------------+
| 586454 | 7 | 74A34AA1D5A7 | 2018-07-04 00:00:00 | 2018-08-28 00:00:00 |
| 713795 | 7 | 74A34AA1D5A7 | 2018-08-28 00:00:00 | 9999-12-31 00:00:00 |
+---------+------------+--------------+---------------------+---------------------+
2 rows in set (0.66 sec)
现在我们需要检验的就是这个2018-07-04 00:00:00
-> 2018-08-28 00:00:00
以及2018-08-28 00:00:00
-> 9999-12-31 00:00:00
这个过程是否是连续的?
1.2 解决方案
测试思路大致如下:
- step 1:求出某设备最小日期和最大日期之间的差距
- step 2:求出设备每行的日期变化差之和
- 比较step 1和step 2是否相等
得到如下sql:
select device_id
from pit_device_shop_temp
group by device_id
having timestampdiff(day,min(start_date),max(end_date)) <> (sum(timestampdiff(day,start_date,end_date)));
1.3 核对结果
如果根据上述的SQL得到的值是Empty Set
,那么表示变动的过程是正确的。
相关文章
- Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
- 【Mysql 学习】mysql 字符集
- FlinkCDC读取MySQL并写入Kafka案例(com.alibaba.ververica)
- 【MySQL】Innodb 恢复工具介绍
- 【MySql】MySQL Replication Fatal Error 1236
- 【MySql】mysql 表的常规管理
- 【Mysql安装】Mac下安装mysql
- 1.5 MySql建表
- mysql数据库-基础--长期维护
- MySQL批量SQL插入性能优化
- Ruby on Rails 3 Can't connect to local MySQL server through socket '/tmp/mysql.sock' on linux
- Mysql一个非常有用的内置函数今天碰到要把MySQL数据库中的varchar转换成date类型进
- mysql多实例(个人的情况,不是大众的)里面有配置好的脚本+主从复制
- Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
- [转]2006 MySQL server has gone away错误,最大值溢出解决办法 mysql max_allowed_packet 查询和修改
- MySQL 是如何实现RC事务隔离级别的
- Python:mysql-replication监控MySQL的binlog变动
- 上Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题和解决方法
- fedora23中安装php-mysql等
- Mysql 查看死锁,解除死锁 方式
- Mysql实战篇之Mysql为什么会选错索引?--02
- 【MySQL】mysql查询语句大总结_Unit04
- MySQL报错Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50568, now run
- 【Mysql异构实时同步Oracle】OGG12异构同步mysql到oracle(windows mysql实时同步数据到linux oracle)详细文档