在 MySQL 中计算每日平均日期或时间间隔
在先前的文章先前的文章中,我们使用 Navicat for SQL Server 将 SQL Server 中给定列的平均每日计数制成表格。在今天的后续文章中,我们将通过计算基于开始日期和结束日期列的每日平均日期或时间间隔来稍微提高难度系数。出于演示目的,我将使用 Navicat Premium 和 MySQL。
计算以日为单位的电影租借时间
在 Sakila 示例数据库的 rental 表中,有两个日期字段代表一个时间间隔:它们是租借日期和归还日期。无疑,这两个字段存储租借电影的日期时间以及归还电影的日期时间。
考虑到这一点,假设我们需要编写一个查询来显示每日电影租借的平均长度。第一步将是计算所有电影租借的时长。以下是在 Navicat 中查询的样子:
若要将 rental_date 从日期时间转换为纯日期,我们可以使用 DATE() 函数。它接受任何有效的日期或日期时间表达式。
日数可以使用 MySQL DATEDIFF() 函数计算。它返回两个日期或日期时间之间的日数。Navicat 提供的自动完成代码功能可以帮助我们使用 DATEDIFF() 函数。当你开始键入单词时,会出现一个弹出列表,其中包含有关模式、表或视图、列以及存储过程和函数的建议。以下是建议列表中的 DATEDIFF() 函数:
选择一个函数后,它会以可通过 TAB 键聚焦、颜色编码、输入参数的格式插入到代码中的光标位置,以便快速输入:
关于时间
对于较短的时间范围,可以使用 TIMEDIFF() 代替 DATEDIFF()。它返回以秒为单位的时差。对于更长的时间间隔,你可以将返回值除以 60 转换成分钟,再将返回值除以 60 转换成小时。
按日分组结果
下一步是按日分组结果。这可以通过 GROUP BY 子句完成。它使我们可以将诸如 COUNT() 和 AVG() 之类的聚合函数应用于每个 rental_date 的租用日数。以下是加入了 GROUP BY 子句的查询:
你会注意到,我将 avg_days_rented 舍入到小数点后一位。否则,我们将获得 4 个精度点,这对于我们的目的而言可能有点多!
总结
幸亏 MySQL 有许多日期或时间函数,基于开始和结束日期列来计算每日平均日期或时间间隔比以前容易得多。此外,Navicat 功能丰富的 SQL 编辑器为几乎所有数据库实体(包括模式、表、列以及函数和存储过程)提供自动完成代码功能,这能进一步简化查询编写。如果你对 Navicat Premium 感兴趣,可以免费试用 14 天!
往期回顾
相关文章
- Mysql远程连接数据库报错排查:pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '**.**.**.**' (timed out)")
- mysql中的递归
- mysql中创建用户和赋权限
- 【MySQL】批量删除mysql中数据库中的表
- MySQL按照汉字的拼音排序,mysql汉字排序
- mysql--SQL编程(关于mysql中的日期) 学习笔记2
- PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)--续
- CentOS 6.4下编译安装MySQL 5.6.14
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- 【MYSQL数据库开发之三】MYSQL 获得数据库和表的信息、日期计算、对表的删除修改等操作!
- connection to dat Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- mysql between and 遇到日期查询边界问题
- mysql 5.5 安装到最后未响应的解决方法
- MySQL 如何生成日期表
- MySQL 生成日期表
- MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)
- MySQL事务与MVVC
- Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
- error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
- Mysql 计算当前日期是本月第几周:一个自定义算法
- 使用logstash同步MySQL数据到ES
- MYSQL提权之反弹SHELL——数据库提权属于webshell到管理员的纵向提权,本质还是利用udf提权,无非是在mysql自定义函数中使用了反弹shell而已
- MySQL常用日期的计算
- Mysql之安全清理mysql-slow.log
- Mysql入门技能树-时间日期函数(一)
- 【MySQL】mysql查询语句大总结_Unit04
- Kubernetes部署_使用kubernetes部署Mysql主从结构(Kubernetes工作实践类)
- [MySQL] 解决办法:mysqld: File ‘.binlog.index‘ not found (OS errno 13 - Permission denied)