SQL 通用表表达式(CTE )

server/2025/3/30 18:32:09/

目录

概念:CTE: Common table Expression 

CTE 语法

CTE Demo


概念:CTE: Common table Expression 

通用表表达式(CTE)是SQL中用于简化复杂查询的工具,第一次上线于SQL Server 2005。

CTE提供了一个临时的结果集,可用于SELECT、INSERT、UPDATE、DELETE和MERGE操作。本文详细介绍了CTE的语法、非递归和递归使用方式,并通过实例展示了如何生成行号。非递归CTE用于一次性查询,而递归CTE则能自我引用,直至满足终止条件。CTE在需要临时结果集的场合非常有用。

相比于TempDB而言的优点是减少I/O操作, 不用主动释放。

CTE 语法

CTE语法

sql">-- Demo 1: expression_name 
WITH expression_name [ ( column_name [,...n] ) ] 
AS 
( CTE_query_definition )select column_name [,...n] from expression_name -- Demo 2: expression_name , expression_name2 
WITH expression_name [ ( column_name [,...n] ) ] 
AS 
( CTE_query_definition )
,expression_name2 [ ( column_name [,...n] ) ] 
AS 
( CTE_query_definition )select column_name [,...n] from expression_name 
union all
select column_name2 [,...n] from expression_name -- Demo 3: expression_name , expression_name2 . 此文章中统计结果基于这个脚本
WITH expression_name [ ( column_name [,...n] ) ] 
AS 
( CTE_query_definition )select column_name [,...n] from expression_name ; with expression_name2 [ ( column_name [,...n] ) ] 
AS 
( CTE_query_definition )select column_name2 [,...n] from expression_name 

CTE Demo

DemoDB是主数据库,DemoDB.Archive 是Archive数据库

AbpAuditLogs table scripts

sql">CREATE TABLE [dbo].[AbpAuditLogs]([Id] [bigint] IDENTITY(1,1) NOT NULL,[TenantId] [int] NULL,[UserId] [bigint] NULL,[ServiceName] [nvarchar](256) NULL,[MethodName] [nvarchar](256) NULL,[Parameters] [nvarchar](1024) NULL,[ExecutionTime] [datetime] NOT NULL,[ExecutionDuration] [int] NOT NULL,[ClientIpAddress] [nvarchar](64) NULL,[ClientName] [nvarchar](128) NULL,[BrowserInfo] [nvarchar](256) NULL,[Exception] [nvarchar](2000) NULL,[ImpersonatorUserId] [bigint] NULL,[ImpersonatorTenantId] [int] NULL,[CustomData] [nvarchar](2000) NULL,CONSTRAINT [PK_dbo.AbpAuditLogs] PRIMARY KEY CLUSTERED 
([Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

 用于统计每分钟和每秒钟的并发用户数量。

sql">declare @StartDate datetime=DateAdd(day,-30,getdate());
with tmpT as (select UserId,ExecutionTime=FORMAT(ExecutionTime, 'yyyy-MM-dd HH:mm') from AbpAuditLogs where UserId>0 and ExecutionTime>@StartDateunion all select UserId,ExecutionTime=FORMAT(ExecutionTime, 'yyyy-MM-dd HH:mm') from [DemoDB.Archive].[dbo].[AbpAuditLogs]  where UserId>0 and ExecutionTime>@StartDate
)select top 10 ExecutionTime,[AVG-User-In-Minutes]=count(distinct UserId) from tmpT group by ExecutionTime order by [AVG-User-In-Minutes] desc;with tmpTS as (select UserId,ExecutionTime=FORMAT(ExecutionTime, 'yyyy-MM-dd HH:mm:ss') from AbpAuditLogs where UserId>0 and ExecutionTime>@StartDateunion all select UserId,ExecutionTime=FORMAT(ExecutionTime, 'yyyy-MM-dd HH:mm:ss') from [DemoDB.Archive].[dbo].[AbpAuditLogs]  where UserId>0 and ExecutionTime>@StartDate
)select top 10 ExecutionTime,[AVG-User-In-Second]=count(distinct UserId) from tmpTS group by ExecutionTime order by [AVG-User-In-Second] desc


http://www.ppmy.cn/server/179530.html

相关文章

用C#实现UDP服务器

对UDP服务器的要求 如同TCP通信一样让UDP服务端可以服务多个客户端 需要具备的条件: 1.区分消息类型(不需要处理分包、黏包) 2.能够接收多个客户端的消息 3.能够主动给自己发过消息的客户端发消息(记录客户端信息)…

Vue学习笔记集--postcss-px-to-viewport

postcss-px-to-viewport插件 以下是 postcss-px-to-viewport 插件的功能和使用方法: 功能 postcss-px-to-viewport 是一个 PostCSS 插件,用于将 CSS 中的 px 单位转换为 vw 或 vh 单位。它可以帮助实现不同屏幕尺寸下的自适应布局,提高页面…

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

文章目录 1、问题描述2、问题推测3、解决方法3.1 selenium自动启动浏览器3.2 selenium接管已启动的浏览器3.3 区别总结4、代码实战4.1 手动方法(手动打开浏览器输入账号密码)4.2 自动方法(.bat文件启动的浏览器)1、问题描述 使用selenium自动化测试爬取pdd的时候,通过携带…

Win11+VS2022+CGAL5.6配置

1. CGAL库简介 CGAL(Computational Geometry Algorithms Library)是一个开源的计算几何算法库,主要用于处理几何问题和相关算法的实现。它提供了丰富的几何数据结构和高效算法,覆盖点、线、多边形、曲面等基本几何对象的表示与操…

高级sql技巧

窗口函数(Window Functions) 窗口函数允许你在不改变行数的情况下,对数据进行分组计算。常见的窗口函数包括 ROW_NUMBER()、RANK()、DENSE_RANK()、SUM()、AVG() 等。 SELECT employee_id,department_id,salary,RANK() OVER (PARTITION BY …

攻防世界-web-1

Training-WWW-Robots 在URL后面加上/robots.txt 直接在URL后面添加/fl0g.php PHP2 他问我能不能登录这个网站,又因为考察php内容,在URL后面添加/index.php,无任何回显 试试/index.phps 分析一下代码,发现要用get方式上传idadmin,…

Python爬虫获取1688商品(按图搜索)接口的返回数据说明

一、引言 在电商领域,按图搜索功能(类似于淘宝的拍立淘)已经成为一种重要的商品检索方式。通过上传图片,用户可以快速找到与图片相似的商品,极大地提升了购物体验。1688作为国内领先的B2B电商平台,也提供了…

c#难点整理3

1.静态类的说明 a.静态类里不能定义实例方法,实例属性,所以说非静态类是无法继承静态类的。父类无法拥有实例化的方法和属性,子类可以,这从逻辑上是矛盾的,不符合继承的逻辑。 b.那么静态类与静态类之间能否继承能呢…