首页 > 数据库 >MSSQL根据特定字段删除并保留ID最大的一条数据

MSSQL根据特定字段删除并保留ID最大的一条数据

时间:2024-09-03 15:35:52浏览次数:10  
标签:删除 rn RankedRecords MSSQL ExportCode FlowCode ID Id

需求:MSSQL的,只保留一条数据,表是 RemoteExportCode,字段有ExportCode, FlowCode,Id 根据ExportCode = '10f3703cc98c4693bfe253e7846c94c3' 来删除重复的FlowCode ,只保留ID大的那一条  

思路:在 RemoteExportCode 表中根据 ExportCode 值 '10f3703cc98c4693bfe253e7846c94c3' 删除重复的 FlowCode 记录,同时保留具有最大 Id 的记录,你可以使用 SQL Server 的 CTE(Common Table Expressions,公共表表达式)来辅助完成这个任务。

WITH RankedRecords AS (
    SELECT
        ExportCode,
        FlowCode,
        Id,
        ROW_NUMBER() OVER (PARTITION BY ExportCode, FlowCode ORDER BY Id DESC) AS rn
    FROM
        RemoteExportCode
    WHERE
        ExportCode = '10f3703cc98c4693bfe253e7846c94c3'
)
DELETE FROM RankedRecords
WHERE
    rn > 1;

解释

  1. CTE (RankedRecords):

    • 这部分定义了一个名为 RankedRecords 的 CTE,其中包含了原始表 RemoteExportCode 中所有满足条件 ExportCode = '10f3703cc98c4693bfe253e7846c94c3' 的记录。
    • 使用 ROW_NUMBER() 函数对每个 ExportCode 和 FlowCode 的组合进行编号,按照 Id 降序排列。这意味着对于每组相同的 ExportCode 和 FlowCode,具有最大 Id 的记录将获得 rn = 1 的排名。
  2. DELETE 语句:

    • 从 RankedRecords CTE 中删除所有 rn > 1 的记录。这意味着除了具有最大 Id 的记录外,其他记录都将被删除。

这个查询将有效地删除所有重复的 FlowCode 记录,只保留具有最大 Id 的记录。请注意,在执行删除操作之前,最好先备份数据或在一个测试环境中验证查询的正确性。

如果你想要验证这个查询是否正确工作,可以在删除之前先使用 SELECT 语句来查看结果:

WITH RankedRecords AS (
    SELECT
        ExportCode,
        FlowCode,
        Id,
        ROW_NUMBER() OVER (PARTITION BY ExportCode, FlowCode ORDER BY Id DESC) AS rn
    FROM
        RemoteExportCode
    WHERE
        ExportCode = '10f3703cc98c4693bfe253e7846c94c3'
)
SELECT *
FROM RankedRecords
WHERE rn > 1;

这将返回所有将被删除的记录,以便你确认这些确实是不需要的重复记录。

标签:删除,rn,RankedRecords,MSSQL,ExportCode,FlowCode,ID,Id
From: https://www.cnblogs.com/linfenghp/p/18394735

相关文章

  • 基于IDEA创建Maven工程及注意事项
    Java全能学习+面试指南:https://javaxiaobear.cn1.概念梳理Maven工程的GAVPMaven工程相对之前的项目,多出一组gavp属性,gav需要我们在创建项目的时候指定,p有默认值,我们先行了解下这组属性的含义:Maven中的GAVP是指GroupId、ArtifactId、Version、Packaging等四个属性的缩写,其中前......
  • 基于IDEA进行Maven工程构建
    Java全能学习+面试指南:https://javaxiaobear.cn1.构建概念和构建过程项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。项目构建是软件开发过程中至关重要的一部分,它能够大大提高软......
  • Android开发 - BitmapFactory 类解码图像文件并转换为 Bitmap 对象与 BitmapFactory.O
    BitmapFactory是什么BitmapFactory用于解码图像文件,并将它们转换为Bitmap对象。Bitmap是用来表示图像的基本类,它是一个位图的抽象表示。BitmapFactory提供了一组静态方法,这些方法可以用来将各种图像文件格式(如PNG、JPEG、WEBP等)解码成Bitmap对象BitmapFactory的好......
  • HivisionIDPhotos :一款开源的轻量级且高效的AI证件照制作工具
    HivisionIDPhotos是一款开源的轻量级且高效的AI证件照制作工具,它通过AI算法实现了对多种用户拍照场景的识别、抠图以及证件照生成。这款工具能够根据不同的尺寸规格生成标准证件照和排版照,适用于护照、签证等多种用途。HivisionIDPhotos的主要特点包括轻量级抠图、生成标准证......
  • Android经典实战之窗口和WindowManager
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点在Android开发中,“窗口”是一个非常基础且重要的概念。窗口通常用于承载和显示用户界面内容。了解窗口的工作机制,以及如何管理窗口,对于开发复杂的和用户体验良好的应用程序至......
  • 25. shell当中的函数详解,管理函数,定义函数,交互式环境调用函数,查看删除函数,脚本中的函
    文章目录前言管理函数定义函数交互式环境调用函数查看函数删除函数脚本中的函数定义及使用函数使用函数文件环境函数示例总结友情链接前言函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独......
  • 【已解决】Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.
    一、问题描述Invalidvaluetypeforattribute‘factoryBeanObjectType‘:java.lang.String二、解决方案更新本地的Mybatisplus版本<dependency>  <groupId>com.baomidou</groupId>  <artifactId>mybatis-plus-spring-boot3-starter</artifactId> ......
  • 英伟达™(NVIDIA®)发布 NVEagle: 超级震撼的视觉语言模型,7B、13B 和 13B 聊天微调版
    多模态大型语言模型(MLLM)是人工智能领域的一次重大飞跃,它将视觉信息和语言信息结合起来,能够更好地理解和解释复杂的现实世界场景。这些模型旨在观察、理解和推理视觉输入,使其在光学字符识别(OCR)和文档分析任务中发挥无价之宝的作用。这些MLLM的核心在于它们的视觉编码器,可......
  • 11.吐血整理sed入门到精通,sed语法,脚本命令,打印,替换,删除,插入,行替换,字符替换,保
    文章目录前言sed介绍1.sed介绍2.sed语法介绍3.sed脚本命令1.打印2.s替换3.删除脚本命令d3.插入脚本命令a/i4.行替换脚本命令c4.字符替换脚本y5.保存内容脚本w6.插入其他文本r6.中断退出脚本命令q脚本命令当中的地址[address]正则表达式sed[选项]1.sed-i选项2.sed-e......
  • Fiddler抓包工具
    前言Fiddler是测试过程中常见的抓包工具。一、什么是Fiddler?谈到Fiddler之前就不得不了解一下B/S架构以及请求过程的理解,如下图所示1、编写程序部署到web服务器;2、web服务器运行在服务器上,绑定ip地址并监听某端口,接受和处理http请求;ps:tomcat就是一种web服务器,用来部......