如何使用 SQL 识别记录中的记录模式序列?

2023-12-04

这对我来说是一个相当新的练习,但我需要找到一种方法来识别表中的模式序列。 例如,假设我有一个类似于以下内容的简单表:

enter image description here

现在我想做的是识别并分组所有具有值 5、9 和 6 的排序模式的记录,并在查询中显示它们。您将如何使用 T-SQL 完成此任务?

结果应该如下所示:

enter image description here

我寻找了一些如何实现这一点的潜在示例,但找不到任何真正有帮助的东西。


您可以使用以下封装在CTE为了将序列号分配给序列中包含的值:

;WITH Seq AS (
    SELECT v, ROW_NUMBER() OVER(ORDER BY k) AS rn
    FROM (VALUES(1, 5), (2, 9), (3, 6)) x(k,v)
)

Output:

v   rn
-------
5   1
9   2
6   3

使用上面的CTE您可以识别岛,即包含整个序列的连续行的切片:

;WITH Seq AS (
    SELECT v, ROW_NUMBER() OVER(ORDER BY k) AS rn
    FROM (VALUES(1, 5), (2, 9), (3, 6)) x(k,v)
), Grp AS (
SELECT [Key], [Value], 
       ROW_NUMBER() OVER (ORDER BY [Key]) - rn AS grp            
FROM mytable AS m
LEFT JOIN Seq AS s ON m.Value = s.v
)
SELECT *
FROM Grp

Output:

    Key Value   grp
   -----------------
    1   5       0
    2   9       0
    3   6       0
    6   5       3
    7   9       3
    8   6       3

grp字段可以帮助您准确识别这些岛屿。

您现在需要做的就是过滤掉部分组:

;WITH Seq AS (
    SELECT v, ROW_NUMBER() OVER(ORDER BY k) AS rn
    FROM (VALUES(1, 5), (2, 9), (3, 6)) x(k,v)
), Grp AS (
SELECT [Key], [Value], 
       ROW_NUMBER() OVER (ORDER BY [Key]) - rn AS grp            
FROM mytable AS m
LEFT JOIN Seq AS s ON m.Value = s.v
)
SELECT g1.[Key], g1.[Value]
FROM Grp AS g1
INNER JOIN (
   SELECT grp
   FROM Grp
   GROUP BY grp
   HAVING COUNT(*) = 3 ) AS g2
ON g1.grp = g2.grp

演示在这里

Note:这个答案的最初版本使用了INNER JOIN to Seq。如果表包含类似的值,这将不起作用5, 42, 9, 6, as 42将被过滤掉INNER JOIN并且该序列被错误地识别为有效序列。此编辑归功于@HABO。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SQL 识别记录中的记录模式序列? 的相关文章

  • SQL Server 文件操作?

    使用 SQL Server 2005 如何使用 T SQL 将文件读入 SPROC 所以 假设我有一个像这样的 CSV 文件 ID OtherUselessData 1 asdf 2 asdf 3 asdf etc 我基本上想这样做 Sel
  • 如何关闭与数据库的现有连接

    我想关闭与 MS SQL Server 的现有连接 以便可以通过编程方式对该数据库进行恢复 这应该会断开其他所有人的连接 并使您成为唯一的用户 alter database YourDb set single user with rollb
  • 一张表中按最大日期过滤重复行的 SQL 查询

    我有一个 SQL 数据库 persons 它具有基于 IDNum 列的重复条目 我需要查询条目并仅根据最新创建日期显示行或重复条目 这是查询 SELECT IDNum PersonPGUID CreatedDateTime FirstNam
  • 触发器与非规范化存储过程的优缺点

    当涉及到对事务数据库中的数据进行非规范化以提高性能时 至少 有三种不同的方法 通过存储过程推送更新 更新规范化交易数据和非规范化报告 分析数据 在事务表上实现更新辅助表的触发器 这几乎总是维护历史时所采取的路线 将处理推迟到夜间批处理 可能
  • SQL。 SP 或函数应计算周五的下一个日期

    我需要编写一个存储过程来返回给定日期的下周五日期 例如 如果日期是 05 12 2011 那么它应该返回下周五日期 05 13 2011 如果您通过 05 16 2011 那么它应该返回日期是 5 20 2011 星期五 如果您将星期五作为
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • SQL Server 每年的第一个星期一

    如何使用 T SQL 查找 一年中的第一个星期一 这是 ngruson 发布的链接中的示例 http sqlbump blogspot nl 2010 01 first monday of year html http sqlbump bl
  • 如何授予 SQL Server 代理访问权限以便能够写入/修改系统文件?

    我的工作有一个存储过程 运行 BCP 来查询一些数据 如果我单独运行 QUERYOUT 命令 它就会起作用 但是 如果我尝试在作业中运行它 它会创建文件但 挂起 并且数据永远不会放入文件中 这会永远挂起 所以我通常终止 BCP exe 我的
  • SQL Server 中的每个实体自动增量字段?

    我的数据库中有一个稳定的 食物 主键为 fooD 我有第二个表 foo Attributes 其外键引用 foo fooD 我想在 fooAttributes 表上有一个组合键 fooID attributeNumber 当我插入新属性时
  • SQL Server 中全文搜索的奇怪行为

    我的 MyTable 带有列消息 NVARCHAR MAX ID 为 1 的记录包含消息 0123456789333444 Test 当我运行以下查询时 DECLARE Keyword NVARCHAR 100 SET Keyword 01
  • 查询获取每条记录的最小日期[重复]

    这个问题在这里已经有答案了 我想获取表中每条记录的最小日期 该表具有多个带有一个主键的日期条目 看看我的桌子 CaseNo Entry date ABC 001 2 12 13 ABC 002 2 09 13 ABC 001 1 01 13
  • 将逗号分隔的主数据替换为列中的描述

    有 2 个 SQL Server 表 Products Name Status Code Product 1 1001 1003 Product 2 1001 1005 1006 Status Code Description 1001 S
  • 单个查询删除并显示重复记录

    采访中提出的问题之一是 一张表有100条记录 其中 50 个 是重复的 是否可以用单个 查询删除重复记录 从表中以及选择和 显示剩余 50 条记录 这可以在单个 SQL 查询中实现吗 Thanks SNA 对于 SQL Server 你会使
  • 当两个表非常相似时,什么时候应该将它们合并?

    我有事件和照片 然后对两者进行评论 现在 我有两个评论表 一个用于与事件相关的评论 另一个用于照片评论 架构与此类似 CREATE TABLE EventComments CommentId int EventId int Comment
  • SQL Server 2008 GUID 列全为 0

    我希望这是我做的一个简单的傻事 我的数据库中有一个表 设置如下 column name widget guid data type uniqueidentifier allow nulls false default value newid
  • 重新启动后无法远程或本地连接到 SQL Server

    上周末进行一些网络维护后 我们的开发服务器出现了一些问题 导致我们重新启动它 重新启动期间安装了一些更新 这可能是也可能不是一个因素 从那时起 我们就无法连接到 SQL Server 2005 即使是通过 Management Studio
  • 如何选择列值不不同的每一行

    我需要运行一个 select 语句 返回列值不不同的所有行 例如 EmailAddress 例如 如果表格如下所示 CustomerName EmailAddress Aaron email protected cdn cgi l emai
  • Razor C# - 从数据库获取数据

    我正在使用 WebMatrix 我创建了一个数据库并放置了一个包含几行数据的表 我可以连接到它并获取数据WebGrid 但它只提供了一种使用表格输出数据的方法 这是我的 shows cshtml 代码 var db Database Ope
  • SSRS ReportViewer 与 XML 嵌入数据源相关的问题

    我有 C WPF 应用程序 我想在 ReportViewer 控件中显示 SSRS 报告 本地报告文件中嵌入了 XML 数据源 从 SQL Server Business Intelligence Development Studio 运行
  • 如何在sql server 2008R2中将单个单元格拆分为多个列?

    我想将每个名称拆分为各个列 create table split test value integer Allnames varchar 40 insert into split test values 1 Vinoth Kumar Raj

随机推荐

  • Javascript - 正则表达式来验证日期格式[重复]

    这个问题在这里已经有答案了 有没有办法在 JavaScript 中使用正则表达式来验证多种格式的日期 例如 DD MM YYYY 或 DD MM YYYY 或 DD MM YYYY 等 我需要将所有这些都放在一个正则表达式中 但我不太擅长
  • memset 的速度与直接赋值为零的速度

    请考虑下面的结构定义 struct xyz char a void ptr uint16 t num1 uint32 t num2 uint64 t num3 我可以通过以下三种方式之一将此结构的实例初始化为零 申报时 struct xyz
  • 如何创建在 Windows 中打开文件的热键

    我正在创建一个应用程序 我希望当用户打开我的应用程序时 它应该为自己创建一个热键 例如ctrl alt f以便每次用户按下这些组合键时应用程序都会自动运行 我知道如何通过右键单击应用程序并添加组合键在 Windows 中手动实现此目的 但我
  • 使用 if 语句声明 const 的值

    我有一个const numberOfComments这是一个数组的大小 我想要另一个const riskByComments其值为 5 如果numberOfComments大于2 否则应为0 我知道我可以轻松做到这一点let 但我知道最好只
  • 模板参数中的“T”和“const T”有什么区别吗?

    以下2种语法有什么区别 template
  • 是否可以获取特定格式的 java.util.Date 对象?

    我想问一下java util Date的用法 这是我的示例课程 public class DateConverter public static void main String args SimpleDateFormat simpleDa
  • 我使用Lua脚本下载了mp4文件,但TikTok(其他应用程序)找不到该视频

    在Android手机上使用Lua脚本成功下载mp4文件后 系统视频无法检测到1 mp4文件 在TikTok中也找不到该视频进行发布 我使用脚本下载了 1 mp4 我手动复制1 mp4成为copy mp4 1 抖音无法检测到mp4 copy
  • 如何在 jQuery 中通过自定义属性的特定值获取元素?

    我有一个名为的自定义属性数据角色我想找到所有元素数据角色 内容 在 jQuery 中 我目前正在使用一些旧的 JavaScript 代码来执行此操作 var elements element getElementsByTagName tag
  • 除了 CURLOPT_COOKIEFILE 之外,如何使用 PHP curl 发送 cookie?

    提交表单后 我正在从网站上抓取一些内容 问题是脚本时不时地失败 比如说五分之二的脚本失败 我使用 php curl COOKIEFILE 和 COOKIEJAR 来处理 cookie 然而 当我观察浏览器发送的标头 从浏览器访问目标网站并使
  • Python 使用另一个文件的输入在文件中搜索文本

    我是 python 和编程新手 我需要一些关于 python 脚本的帮助 有两个文件 每个文件包含电子邮件地址 超过 5000 行 输入文件包含我要在数据文件中搜索的电子邮件地址 还包含电子邮件地址 然后我想将输出打印到文件或显示在控制台上
  • PhpMy管理员密码

    我收到错误 1045 用户 root localhost 访问被拒绝 使用密码 NO 在我不小心更改了 phpmyadmin 中 root 和 127 0 0 1 的密码后 问题是我无法更改 common lib php 我想以某种方式恢复
  • 为具有不同项目布局的 ListView 创建 ViewHolder

    我有一个 ListView 针对不同的项目有不同的布局 有些项目是分隔符 有些项目是不同的 因为它们保存不同类型的数据等 我想实现 ViewHolders 来加速 getView 过程 但我不太确定如何去做 不同的布局有不同的数据 这使得命
  • jQuery DataTables 根据多个值过滤行

    我正在尝试使用多个过滤器 这些过滤器将根据选择的过滤器隐藏 显示数据表上的行 我的计划是将过滤器值放入一个数组中 并将它们与第一列中的数据搜索属性进行比较 但我目前所拥有的不起作用 这是一个 JSfiddle 我在下面加上代码https j
  • 无法在 Visual Studio Update1 中并行运行 mstest

    我正在开发一个基于 MSTest 框架的单元测试项目 我遇到的问题是我无法并行运行测试 它是按顺序运行的 我在我的测试设置文件中添加了以下行
  • Java 基本类型和内存中的对象结构

    当我们创建一个 Java 原始变量或 Java 对象时 它在内存中是如何表示 构造的 int A 是否创建了对整数类型的引用 保存在内存中分配的整数类型是否需要内存空间 A 3 现在是否已经分配了保存整数类型所需的内存空间 然后 A 引用该
  • 是否可以直接在 VB6 窗体上使用 Windows 窗体控件?

    是否可以直接在 VB6 窗体中使用 NET Windows 窗体控件 这里的目标是在旧版 VB6 应用程序中使用更新的 NET 控件 我们已经有了一个混合的 NET VB6 环境 我知道Microsoft InteropForms 工具包但
  • iPad 应用程序:将 PDF 文件合并为 1 个 PDF 文档/创建多页滚动视图的 PDF 文档

    我正在编写一个 iPad 应用程序 它使用带有页面控制的滚动视图 我需要将所有页面创建为 1 个 PDF 文件 到目前为止 我认为我应该循环遍历所有子视图 页面 并为每个子视图 使用 CGPDFContext 创建 PDF 文件 但我确实需
  • 使用图像文件的一部分创建 UIImageView

    我正在子类化UIImageView创建基于图块的应用程序 本质上 我正在获取一个图像文件并将其分成几部分 然后将这些部分分配给我的图块 UIImageViews 以便可以独立操纵它们 抓取图像的一部分并用它来绘制图像的最佳方法是什么UIIm
  • 使用 boto3 获取新创建的 amazon ec2 实例的公共 IPv4 地址

    我正在使用 boto3 创建一个 ec2 实例 我想打印该新实例的 IP 地址 ec2 boto3 resource ec2 create the instance new instance ec2 create instances Ima
  • 如何使用 SQL 识别记录中的记录模式序列?

    这对我来说是一个相当新的练习 但我需要找到一种方法来识别表中的模式序列 例如 假设我有一个类似于以下内容的简单表 现在我想做的是识别并分组所有具有值 5 9 和 6 的排序模式的记录 并在查询中显示它们 您将如何使用 T SQL 完成此任务