Oracle Database 23ai新特性之INTERVAL聚合函数增强

Oracle Database 23ai 开始 AVG 以及 SUM 函数支持 INTERVAL 数据类型,它们可以作为聚合函数或者分析函数使用。

示例表

本文将会使用以下示例表:

create table t1 (id          integer,start_time  timestamp,end_time    timestamp,duration    interval day to second generated always as (end_time - start_time) virtual
);insert into t1 (id, start_time, end_time) values (1, timestamp '2024-06-10 08:45:00.0', timestamp '2024-06-10 18:01:00.0');
insert into t1 (id, start_time, end_time) values (2, timestamp '2024-06-11 09:00:00.0', timestamp '2024-06-11 17:00:00.0');
insert into t1 (id, start_time, end_time) values (3, timestamp '2024-06-12 08:00:00.0', timestamp '2024-06-12 17:45:00.0');
insert into t1 (id, start_time, end_time) values (4, timestamp '2024-06-13 07:00:00.0', timestamp '2024-06-13 16:00:00.0');
commit;

查询表中的数据时可以看到基于 START_TIME 和 END_TIME 计算出的时间间隔:

alter session set nls_timestamp_format='yyyy-mm-dd hh24:mi:ss';select * from t1;ID START_TIME           END_TIME             DURATION
---------- -------------------- -------------------- --------------------1 2024-06-10 08:45:00  2024-06-10 18:01:00  +00 09:16:00.0000002 2024-06-11 09:00:00  2024-06-11 17:00:00  +00 08:00:00.0000003 2024-06-12 08:00:00  2024-06-12 17:45:00  +00 09:45:00.0000004 2024-06-13 07:00:00  2024-06-13 16:00:00  +00 09:00:00.000000

已知问题

Oracle 数据库很早就支持了 INTERVAL 数据类型的 MIN/MAX 聚合函数和分析函数,例如:

select min(duration) as min_duration,max(duration) as max_duration
from t1;MIN_DURATION         MAX_DURATION
-------------------- --------------------
+00 08:00:00.000000  +00 09:45:00.000000select id,start_time,end_time,duration,min(duration) over () as min_duration,max(duration) over () as max_duration
from t1;ID START_TIME           END_TIME             DURATION             MIN_DURATION         MAX_DURATION
---------- -------------------- -------------------- -------------------- -------------------- --------------------1 2024-06-10 08:45:00  2024-06-10 18:01:00  +00 09:16:00.000000  +00 08:00:00.000000  +00 09:45:00.0000002 2024-06-11 09:00:00  2024-06-11 17:00:00  +00 08:00:00.000000  +00 08:00:00.000000  +00 09:45:00.0000003 2024-06-12 08:00:00  2024-06-12 17:45:00  +00 09:45:00.000000  +00 08:00:00.000000  +00 09:45:00.0000004 2024-06-13 07:00:00  2024-06-13 16:00:00  +00 09:00:00.000000  +00 08:00:00.000000  +00 09:45:00.000000

但是,如果我们尝试在以上示例中使用 SUM 或者 AVG 函数,将会产生一个错误信息(Oracle 23ai 之前的版本):

select sum(duration) from t1;*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECONDselect avg(duration) from t1*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL DAY TO SECOND

解决方案

Oracle 23ai 新增了 INTERVAL 数据类型的 SUM 和 AVG 函数支持。

select sum(duration) from t1;SUM(DURATION)
---------------------------------------------------------------------------
+000000001 12:01:00.000000000select avg(duration) from t1;AVG(DURATION)
---------------------------------------------------------------------------
+000000000 09:00:15.000000000

这种情况下,SUM 和 AVG 函数也可以作为分析函数使用:

select id,start_time,end_time,duration,sum(duration) over () as sum_duration
from t1;ID START_TIME           END_TIME             DURATION             SUM_DURATION
---------- -------------------- -------------------- -------------------- ------------------------------1 2024-06-10 08:45:00  2024-06-10 18:01:00  +00 09:16:00.000000  +000000001 12:01:00.0000000002 2024-06-11 09:00:00  2024-06-11 17:00:00  +00 08:00:00.000000  +000000001 12:01:00.0000000003 2024-06-12 08:00:00  2024-06-12 17:45:00  +00 09:45:00.000000  +000000001 12:01:00.0000000004 2024-06-13 07:00:00  2024-06-13 16:00:00  +00 09:00:00.000000  +000000001 12:01:00.000000000select id,start_time,end_time,duration,avg(duration) over () as avg_duration
from t1;ID START_TIME           END_TIME             DURATION             AVG_DURATION
---------- -------------------- -------------------- -------------------- ------------------------------1 2024-06-10 08:45:00  2024-06-10 18:01:00  +00 09:16:00.000000  +000000000 09:00:15.0000000002 2024-06-11 09:00:00  2024-06-11 17:00:00  +00 08:00:00.000000  +000000000 09:00:15.0000000003 2024-06-12 08:00:00  2024-06-12 17:45:00  +00 09:45:00.000000  +000000000 09:00:15.0000000004 2024-06-13 07:00:00  2024-06-13 16:00:00  +00 09:00:00.000000  +000000000 09:00:15.000000000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/36462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超越规模的冒险之旅:引导人工智能价值对齐

在茫茫技术之林中,人工智能凭借大模型占据了重要地位。人们已经不再局限于人机对弈和AI识图,开始探索那些能够模仿人类思考的机器。无论是日常聊天、文本写作,还是[在完美的提示词引导下创作出惊艳的诗歌],我们不得不承认AI工具已…

双指针算法第二弹(查找总价格为目标值的两个商品-和为s的两个数字 三数之和 四数之和)

系列文章目录 《双指针算法第一弹(移动零 复写零 快乐数)》链接:http://t.csdnimg.cn/Nqdvn 目录 系列文章目录 前言 1. 查找总价格为目标值的两个商品 (1)题目及示例 (2)思路&#xff08…

纯css写一个动态圣诞老人

效果预览 在这篇文章中,我们将学习如何使用CSS来创建一个生动的圣诞老人动画。通过CSS的魔力,我们可以让圣诞老人在网页上摇摆,仿佛在向我们招手庆祝圣诞节和新年。 实现思路 实现这个效果的关键在于CSS的keyframes动画规则以及各种CSS属性…

想要打造高效活跃的私域社群,这些技巧要知道

对一些企业来说“做社群等于做私域”。 在腾讯提到的私域转化场景中,社群与小程序、官方导购三者并列。 社群连接着品牌和群内用户。品牌通过圈住更多用户,来持续免费触达用户实现变现,用户则是从品牌方手中直接获取更多服务和优惠。那么&a…

【绝对有用】yolo系列目标检测 核心技术点 汇总

YOLO (You Only Look Once) 是一种高效的目标检测算法,它以速度和精度著称。YOLO 的工作原理是将目标检测视为一个回归问题,直接从图像的像素空间预测目标的类别和位置。YOLO 目标检测头包括以下几个关键部分: 输入图像处理: YOLO…

云计算【第一阶段(19)】磁盘管理与文件系统 LVM与磁盘配额(二)

目录 一、LVM概述 1.1、LVM机制的基本概念 ​编辑 1.2、LVM的管理命令 1.3、lvm存储 两种机制 1.4、lvm应用实例 二、磁盘配额概述 2.1、设置磁盘配额 2.2.1、实现磁盘限额的条件 2.2.2、linux磁盘限额的特点 2.2.3、磁盘配额管理 一、LVM概述 1.1、LVM机制的基本概…

用Python制作一个简单的计算器(加减乘除)

简易计算器 写在前面 小编用python实现了一个简单的计算器,一起来看看吧~ 需要环境: pycharm python 一、需求分析 1.1 功能分析 使用Python的Tkinter界面设计实现一个简单的计算器,主要功能按钮包括数字键、四则运算符、等于号和清除…

JavaScript算法之龟兔赛跑

简介:龟兔赛跑算法,又称弗洛伊德循环检测算法,是一种在链表中非常常用的算法。它基于运动学和直觉的基本定律。本文旨在向您简要介绍该算法,并帮助您了解这个看似神奇的算法。 假设高速公路上有两辆车。其中一辆的速度为 x,另一辆的速度为 2x。它们唯一能相遇的条件是它们…

[MYSQL] MYSQL表的操作

前言 由图可以看出,表是库的一部分,所以有库才能使用表 show databases; 查看已有的库 create database db_name ; 创建库 使用 use bd_name 使用库,之后对标进行增删查改就只会操作这个库里的而不影响其他库 创建表 create table [if not exists] table_name( d…

MySQL周内训参照3、简单查询与多表联合复杂查询

基础查询 1、查询用户信息,仅显示用户的姓名与手机号,用中文显示列名。中文显示姓名列与手机号列 SELECT user_id AS 编号, phone AS 电话 FROM user; 2. 根据订购表进行模糊查询,模糊查询需要可以走索引,需要给出explain语句。…

位运算(、|、^、~、>>、<<)

一、概念 在C#中,位运算是对整数的二进制表示进行操作的运算。这些运算包括按位与(AND)、按位或(OR)、按位异或(XOR)、按位取反(NOT)、左移(Left Shift&…

【区间动态规划】1771. 由子序列构造的最长回文串的长度

本文涉及知识点 动态规划汇总 LeetCode1771. 由子序列构造的最长回文串的长度 给你两个字符串 word1 和 word2 ,请你按下述方法构造一个字符串: 从 word1 中选出某个 非空 子序列 subsequence1 。 从 word2 中选出某个 非空 子序列 subsequence2 。 连…

企业AI落地的大法器-用数据清洗手段提升数据质量,找回遗珠之光

开篇 书接上文,在上文《谈LORA微调与数据质量处理之争》中我们详细叙述了:LORA微调手段和数据清洗之分,以及如何平衡和组合使用LORA微调与数据清洗的手法。 文末我们提到了“下一篇我们讲着重讲述:在打造企业数据清洗工具、平台…

003 SpringBoot操作ElasticSearch7.x

文章目录 5.SpringBoot集成ElasticSearch7.x1.添加依赖2.yml配置3.创建文档对象4.继承ElasticsearchRepository5.注入ElasticsearchRestTemplate 6.SpringBoot操作ElasticSearch1.ElasticsearchRestTemplate索引操作2.ElasticsearchRepository文档操作3.ElasticsearchRestTempl…

git tag 打标签指南

参考 Pro Git 打标签 查看标签 git tag git tag -l 创建标签 git tag tag002 创建了名称是 tag002 的标签,打在最新提交的 commit 上。只是打在本地,没有推送到远程。 如果要给以前的 commitId 打标签,就用 git tag tag001 159e40 给 159e4…

java基于ssm+jsp 弹幕视频网站

1前台首页功能模块 弹幕视频网站,在弹幕视频网站可以查看首页、视频信息、商品信息、论坛信息、我的、跳转到后台、购物车、客服等内容,如图1所示。 图1前台首页界面图 登录,通过登录填写账号、密码等信息进行登录操作,如图2所示…

GPT-5即将登场:期待AI新时代的技术突破与人机高效协作

随着科技的飞速发展,我们即将迎来一个人工智能领域的重要里程碑——GPT-5的发布。这一技术革新无疑是一个激动人心的时刻,它预示着AI技术将迈向一个全新的高度。GPT-5作为人工智能领域的一大突破,有望为我们带来前所未有的应用场景与深远影响…

显卡GTX与RTX有什么区别?哪一个更适合玩游戏?

游戏发烧友们可能对游戏显卡并不陌生,它直接关系到游戏画面的流畅度、细腻程度和真实感。在众多显卡品牌中,英伟达的GTX和RTX系列显卡因其出色的性能而备受关注。 一、GTX与RTX的区别 架构差异 GTX系列显卡采用的是Pascal架构,这是英伟达在…

探索MySQL核心技术:理解索引和主键的关系

在数据密集型应用中,数据库的性能往往是决定一个应用成败的重要因素之一。其中,MySQL作为一种开源关系型数据库管理系统,以其卓越的性能和丰富的功能被广泛应用。而在MySQL数据库优化的众多技巧中,索引和主键扮演着极其重要的角色…

安霸CVFlow推理开发笔记

一、安霸环境搭建: 1.远程172.20.62.13 2. 打开Virtualbox,所在目录:E:\Program Files\Oracle\VirtualBox 3. 配置好ubuntu18.04环境,Ubuntu密码:amba 4. 安装toolchain,解压Ambarella_Toolchain_CNNGe…