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.pswp.cn/diannao/36462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36462.shtml
英文地址,請注明出處:http://en.pswp.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…