[MySQL]同一張資料表的日期欄位相減_派生表(dervied table)的應用

news/2024/7/24 12:57:01 标签: mysql, 数据库, iot

以往對於MySQL數據庫的應用,大多是基本的增刪改查步驟,因此MySQL大多停留在基本語法階段。然而在實際的數據應用上,若能從數據庫直接運算和抽取運算結果,同時不需要在MySQL中額外建立一個實體表,再好不過。

在MySQL中,虛擬表可符合上述需求,其中虛擬表包含臨時表(temporary table)、派生表(derived table)等等。臨時表的語法需注意嵌入以CREAT TEMPORARY TABLE...為開頭;派生表類似臨時表,語法為在SELECT...FROM中嵌入子查詢語句,同時須注意使用派生表必須具有別名,避免MySQL報錯。

此次用同一個資料表的日期欄位相減,取得設備的每日運作累積時間為範例,說明派生表的語法使用方式。使用情境為當設備停機或運作時,連線到MySQL同步紀錄,僅僅是datetime和status的紀錄,其raw data如圖一所示。

圖一

 

a.首先,從datecaltest資料表中,抽取出日期作為獨立欄位。

SELECT datetime, status, Date(datetime) AS date FROM datecaltest;
圖二

b.利用LAG()...OVER()將datetime欄位做向下一個欄位的錯位,並新增為獨立欄位 datatime_2。須提醒的是LAG()...OVER()只能在MySQL 8.0以上的版本調用。

SELECT datetime, status,Date(datetime) AS date,LAG(datetime,1) OVER(ORDER BY datetime DESC) as datetime2 FROM datecaltest;
圖三

 

c.使datatime和datetime1相減做為timedelta欄位,同時用date作為分區參考,並依照datetime排序。

SELECT status,datetime,datetime2,Date(datetime) AS date,timestampdiff(SECOND,datetime,datetime2) AS timedelta 
FROM(
	SELECT status,datetime,Date(datetime) AS date, LAG(datetime,1) OVER(PARTITION by date      
    ORDER BY datetime DESC) as datetime2 FROM datecaltest) AS a  
ORDER BY `a`.`datetime` DESC
圖四

 

d.將同一個日期的Runnningtimedelta欄位加總為累積時間Run_acctime,表示當天設備開啟總時間。

SELECT Date(datetime) AS date,sum(timedelta) AS Run_acctime_sec 
FROM(
	SELECT status,datetime,datetime2,Date(datetime) AS date,timestampdiff(SECOND,datetime,datetime2) AS timedelta 
		FROM(
			SELECT status,datetime,Date(datetime) AS date, LAG(datetime,1) OVER(PARTITION by date ORDER BY datetime DESC) as datetime2 FROM datecaltest
	    	) AS a
    ) AS b 	
WHERE status='Running!'  GROUP BY date DESC	ORDER BY date DESC
圖五

 

一般觀察設備運作的週期,大多由今日前算起的前一段週期,因此若要進一步使該派生表僅體現由今日算起的前一個月內的設備運作累積時間,語法應如何修正,供各位延續思考和應用。

Reference:

1.MySQL派生表 -MySQL教程

2.浅谈MYSQL中的基本表、中间表、临时表、派生表和视图_中间表和临时表的区别_SunBairn的博客-CSDN博客


http://www.niftyadmin.cn/n/183194.html

相关文章

人工智能项目管理软件使用的全面指南

人工智能可以非常强大,而且已经在多个行业中使用。现在有不少人工智能项目管理软件可用,但它们是如何工作的,哪些工具提供了人工智能的好处?这篇文章将涵盖你需要考虑的关键因素,帮助你找到最合适的解决方案。 什么是…

shopee商品详情数据(支持多站点)封装接口代码教程

shopee.item_get-根据ID取商品详情接口 shopee.item_get 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥 (复制v:taobaoapi2014)api_nameString是API接口名称(包括在请求地址中…

信息论小课堂:通信史(单位能量的信息传输率越来越高,网络地不断融合。)

文章目录 引言I 预备知识1.1 通信标准1.2 无线电波的频率越高,绕过障碍物的能力越差。II 通信史2.1 1G2.2 2G2.3 3G2.4 4G2.5 5GIII 通信史小结引言 设备要通信需要都遵守一套大家都认可的信息编码规范,没有标准,彼此就没法沟通。 从1G到5G,将各种网络融合是一个大趋势,…

02-Maven高级-分模块开发、依赖传递、聚合、继承(SpringBoot的部分底层原理)、多模块开发(环境切换)、Nexus私服搭建与使用

文章目录学习目标一、分模块开发与设计1. 分模块开发的意义问题导入模块拆分原则2. 分模块开发(模块拆分)问题导入2.1 创建Maven模块2.2 书写模块代码2.3 通过maven指令安装模块到本地仓库(install指令)2.4 代码演示二、依赖管理1…

DJ3-3 进程调度

目录 3.3.1 进程调度的任务、机制和方式 1. 进程调度的任务 2. 进程调度机制 3. 进程调度的方式 3.3.2 轮转调度算法 1. 时间片轮转法(Round Robin,RR) 2. 时间片的设置 3. 举例 4. 小结 3.3.3 优先级调度算法 1. 优先级调度算…

教你精通JavaSE语法之第九章、抽象类和接口

目录 一、抽象类 1.1抽象类的概念 1.2抽象类的语法 1.3抽象类的特性 1.4抽象类的作用

PCIe基础

PCIe基础 PCI Express,简称PCI-E,官方简称PCIe,是计算机总线的一个重要分支,它沿用既有的PCI编程概念及信号标准,并且构建了更加高速的串行通信系统标准。目前这一标准由PCI-SIG组织制定和维护。 拓扑 配置空间 在 P…

案例|智慧金融:借助AI训练数据打造全新数字员工

顺应大语言模型的浪潮,彭博近日发布了金融领域大语言模型:BloombergGPT,500 亿参数语言模型(*)。数字化、智能化转型正在各行各业全面铺开,人工智能等技术加速向金融业渗透,保险从业机构保持技术…