SQL 通用表表达式(CTE )

ops/2025/3/31 7:16:57/

目录

概念: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/ops/170398.html

相关文章

Mybatis注解的基础操作——02

写mybatis代码的方法有两种: 注解xml方式 本篇就介绍注解的方式 mybatis的操作主要有增删改查,下面进行一一讲解。 目录 一、参数传递 二、增(Insert) 三、删(Delete) 四、改(Update&#…

如何使用Python爬虫按关键字搜索1688商品?

在电商领域,获取1688商品信息对于市场分析、选品上架、库存管理和价格策略制定等方面至关重要。1688作为国内领先的B2B电商平台,提供了丰富的商品数据。通过Python爬虫技术,我们可以高效地获取1688商品的详细信息,包括商品名称、价…

MySQL 创建数据库

MySQL 创建数据库 数据库是现代信息系统中不可或缺的组成部分,它能够帮助我们高效地存储、检索和管理数据。MySQL 作为一款流行的开源关系型数据库管理系统,被广泛应用于各种规模的应用程序中。本文将详细介绍如何在 MySQL 中创建数据库,包括基本概念、操作步骤以及注意事项…

C#从入门到精通(2)

目录 第六章 逻辑结构 (1)if语句 (2)switch语句 (3)while语句 (4)for语句 (5)跳转语句 第七章 数组 (1)一维数组 &#xff0…

架构思维:如何设计一个支持海量数据存储的高扩展性架构_数据分片、存储、复制与一致性的原理性问题

文章目录 PRE引言1. 数据分片策略Hash取模分片一致性Hash分片Range分片分片设计原理核心设计模块分片规则定义动态分片调整路由与负载均衡 应对热点的关键技术多级分片(Hierarchical Sharding)副本分散策略缓存层配合 典型应用场景优缺点分析 2. 应对热点…

关于JESD204B 接口的调试

高速ADC和DAC常常用到JESD204B、JESD20C接口,网上相关的资料众多。此处我们主要介绍如何让JESD204B锁定,调试时的几个要点: 以AD9689 ADC为例,要想让JESD204B接口锁定,需要注意: 1、提供给AD9689的工作时…

Linux生产者消费者模型

Linux生产者消费者模型 Linux生产者消费者模型详解生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点 基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型基础实现生产者消费者步调调整条…

【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究

这篇文章来自于 Chain-of-Thought Prompting of Large Language Models for Discovering and Fixing Software Vulnerabilities 摘要 软件安全漏洞在现代系统中呈现泛在化趋势,其引发的社会影响日益显著。尽管已有多种防御技术被提出,基于深度学习&…