通过连接到满足某些条件的另一个表的最新记录来更新表

2024-02-13

我试图避免为此解决方案使用循环的冲动,而是使用基于集合的操作。

我需要根据最近出现的与另一个表的连接来更新表中的每条记录。我的第一个想法是加入到我需要“最近日期”的表并根据连接条件进行分组,但是使用GROUP BY with UPDATE是无效的。

这是我到目前为止所拥有的。我有预感,CTE 可以解决这个问题...

CREATE TABLE Part (
    Area            VARCHAR(10) NOT NULL,
    SequenceNumber  INT         NOT NULL,
    DateAdded       DATETIME    NOT NULL
);
INSERT INTO Part VALUES
('A', 1, '2018-04-01'),
('A', 1, '2018-04-02'),
('A', 2, '2018-04-03'),
('A', 2, '2018-04-04'),
('B', 2, '2018-04-04'),
('B', 2, '2018-04-03'),
('B', 3, '2018-04-02'),
('B', 3, '2018-04-01');

DECLARE @Filters    TABLE
(
    Area            VARCHAR(10),
    StartingSeqNum  INT,
    StartTime       DATETIME 
);
INSERT INTO @Filters VALUES
('A', 2, NULL),
('B', 3, NULL);

-- Update each StartTime in @Filters with the most recent
-- DateAdded of the corresponding SequenceNumber in the Part table per Area.
UPDATE f
SET f.StartTime = MAX(p.DateAdded)
FROM
    @Filters f
    INNER JOIN Part p ON p.Area = f.Area
        AND p.SequenceNumber = f.StartingSeqNum
GROUP BY
    p.Area,
    p.SequenceNumber;

根据上面的示例数据,该操作应在中填充以下值@Filters:

('A', 2, '2018-04-04')
('B', 3, '2018-04-02')

You can使用 CTE 来执行此操作,如下所示:

;with maxParts as
(
    select Area, SequenceNumber, MAX(dateadded) as maxDateAdded 
    from Part
    group by Area, SequenceNumber
)
UPDATE f
SET f.StartTime = p.maxDateAdded
from @Filters f
    inner join maxParts p 
        on f.Area = p.Area
        and f.StartingSeqNum = p.SequenceNumber

但是,您也可以将 CTE 重写为子查询:

UPDATE f
SET f.StartTime = p.maxDateAdded
from @Filters f
    inner join (
            select Area, SequenceNumber, MAX(dateadded) as maxDateAdded 
            from Part
            group by Area, SequenceNumber
        ) p 
        on f.Area = p.Area
        and f.StartingSeqNum = p.SequenceNumber

这些的查询计划应该是相同的 - CTE 真正允许您的是外观更清晰的查询以及轻松重用该 SELECT 的能力。

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

通过连接到满足某些条件的另一个表的最新记录来更新表 的相关文章

  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid
  • 初级SQL部分:避免重复表达式

    我对 SQL 完全陌生 但我们可以说StackExchange 数据浏览器 https data stackexchange com 我只想按信誉列出前 15 位用户 我写了这样的内容 SELECT TOP 15 DisplayName I
  • SELECT 语句会受到 SQL 注入攻击吗?

    实际上有2个问题 我知道我必须尽可能多地使用存储过程 但我想知道以下内容 A 我可以从 SELECT 语句 例如 Select from MyTable 获得 SQL 注入攻击吗 B 另外 当我在 ASP NET 中使用 SQLDataSo
  • 为表中的每个组选择前 N 行

    我面临一个非常常见的问题 即 为表中的每个组选择前 N 行 考虑一个表id name hair colour score列 我想要一个结果集 对于每种头发颜色 都能得到前 3 名得分手的名字 为了解决这个问题 我得到了我所需要的Rick O
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • 月份增量查询

    我想通过添加 1 个月来更新数据库中的月份 但我不知道如何在以下存储过程查询中添加月份 我不擅长 sql 请检查它 ALTER PROCEDURE dbo ChangePassword password varchar 20 epasswo
  • XML 解析:格式良好的检查:未声明的实体

    我正在使用 SSMS 2008 但收到以下错误 你知道这意味着什么吗 Msg 9448 Level 16 State 1 Line 4 XML parsing line 1 character 89 well formed check un
  • “RDBMS”附近的语法不正确。当我尝试创建外部数据源时,有人遇到同样的问题吗?

    我使用的是sql server 2017 CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH TYPE RDBMS LOCATION
  • 将表数据从一个 SQL Server 导出到另一台 SQL Server

    我有两个 SQL Server 都是 2005 版本 我想将多个表从一个表迁移到另一个表 我努力了 在源服务器上 我右键单击数据库 选择Tasks Generate scripts 问题是在下面Table View options没有Scr
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • 可以获取SQL Server中当前执行的存储过程的行号吗?

    几年前 我在 Sybase Delphi 环境中工作 使用 BDE 连接到数据库服务器 我们有一个 Delphi 小应用程序 给定当前正在执行的存储过程的名称 它可以告诉您当前正在执行该存储过程的哪一行 这对于调试似乎挂起的存储过程非常有用
  • 如何跨多个表强制执行 CHECK 约束

    我有一个在 Microsoft SQL Server 2012 Express 中记录奶牛繁殖信息的数据库 显然 一头牛只有在出生后才能配种 并且在其一生中可能会配种多次 我需要在我的数据库中强制执行这些约束 我目前已经根据下图安排了一个架

随机推荐

  • 如何使用 Swift 5.7 的 RegexBuilder 捕获 10 多个事物?

    假设我有一个存储有关人员信息的文件 其中一行如下所示 Sweeper 30 1992 09 22 China Beijing 0 2020 07 07 Mary Linda Pizza Lemon 从左到右依次是姓名 年龄 出生日期 出生国
  • nmake 附加到变量

    实用程序 NMake 平台 Windows 7 我有以下 Makefile FILE shell c FILE shell cpp exec echo FILE 这与 make 完美配合 这会引发以下 nmake 错误 makefile 2
  • 如何在create-react-app中使用jQuery依赖插件

    我想在我的 React 应用程序中使用 bootstrap 和其他 jQuery 插件 datepicker carousel create react app 以下是我导入 jQuery 和 bootstrap 的方法 import Re
  • 有没有办法在 Vim 中模拟 ReSharper 的“扩展选择”功能?

    ReSharper 有一个很好的功能 称为 扩展选择 通过按CTRL W 我认为这是默认设置 反复地 您从当前插入符号位置中选择越来越多的内容 首先它是一个单词 然后是越来越多的单词 一行 内部然后外部的行块 例如 if 块 然后是一个函数
  • 通过电子邮件发送 SAS html 输出

    我正在使用 SAS Enterprise Guide 6 1 我正在尝试使用 Windows 调度程序对下面的程序进行批处理以生成每周报告 它将有一些过程打印和 sgplots 我将其发送给的用户是高级用户 并且没有 SAS 如果他安装了
  • 在 Android 应用程序中播放 YouTube 视频

    在我的 Android 应用程序中 我希望用户点击一次图像 自动播放 YouTube 视频 视频播放完毕后 用户立即返回到应用程序 在 Android 中执行此操作的最佳方法是什么 我尝试使用意图 这是有效的 因为视频出现在我认为是 You
  • 如何为 Gatsby 提供 GraphQL 架构

    我们从 WordPress 后端引入一些帖子 有些有图片 在 ACF 字段中 有些则没有 问题是 Gatsby 根据它收到的第一个节点推断模式 如果它收到没有图片的节点 则模式是错误的 Gatsby 的 GraphQL 模式从何而来 htt
  • C++ 32 位与 64 位浮动限制

    鉴于代码段如下 我只想知道 为什么64位的long double的最大值比32位的要小 为什么 64 位版本无法扩展与 32 位版本一样多的位数来填充 40 精度输出 LDBL MIN 和 LDBL MAX 的值似乎相等 这是一个错误吗 我
  • 在 App Engine 上哪里可以安全地保存 p12 文件?

    在 App Engine 上 我需要一个 p12 文件来创建签名 URL https developers google com storage docs accesscontrol Signing Strings https develo
  • Django Rest Framework序列化器更新方法不保存对象

    我已经重写了我的序列化器之一的更新方法 以在保存对象之前调用模型的方法 就像这样 class MyModelSerializer serializers ModelSerializer class Meta model MyModel fi
  • 最后插入 ID 返回 0 [重复]

    这个问题在这里已经有答案了 其实关于这个的帖子有很多 但即使我检查了这些 仍然找不到问题 DBC类 protected function connect dns mysql host this gt server dbname this g
  • 将 DateTime 转换为 long,反之亦然

    我想将日期作为数字存储在表中 我知道该怎么做 但我不知道如何回去 如何将 long 变量转换为 ToDateTime DateTime now DateTime Now long t now ToFileTime DateTime toda
  • CMake、C++ 和 Jenkins/持续集成

    我有一个 CMake 示例项目 我想在 Ubuntu 15 10 上运行的 Jenkins 上构建该项目 我已经安装了 https wiki jenkins ci org display JENKINS CMake Plugin https
  • 如何在java中将Mongo DB中的数据导出为ex​​cel格式

    MongoDB 中的架构 姓名 卡马拉 流动 Date 2018 08 03 New set Form y 1 d 3 p 3 我的java代码 公共静态无效主 字符串 args String db Database String col
  • 处理 JSON 对象的最佳方法是什么?

    我有一个代表 JSON feed 的大字符串 我的应用程序从远程网络服务下载此提要 问题 1 下载 JSON feed 后 我应该将其存储在哪里 现在我将其存储在应用程序首选项中并且工作正常 我只是感兴趣是否有任何理由不这样做 或者是否有更
  • 编写 gem 时设置配置设置

    我正在编写一个 gem 我希望它可以在有或没有 Rails 环境的情况下工作 我有一个Configuration允许配置 gem 的类 module NameChecker class Configuration attr accessor
  • 在列表(或其他数据结构)中有效插入多个元素并保持其顺序

    我有一个项目列表 应该一个接一个地插入到类似列表的数据结构中 并且我有每个项目应该插入的索引 例如 items itemX itemY itemZ indexes 0 0 1 预期的结果是有一个像这样的列表 result itemY ite
  • C++ 模板类;任意容器类型的函数,如何定义它?

    好的 简单的模板问题 假设我定义我的模板类是这样的 template
  • 在 macOS 上的 MAMP 或 XAMPP 上安装 phalcon 时出现错误

    我正在尝试在 macOS 上的 xampp 或 MAMP 上安装 phalcon 请告诉我如何在 MAMP 上正确安装 phalcon 我在 XAMPP 上安装时遇到相同的错误 我用这个教程https madebyextreme com i
  • 通过连接到满足某些条件的另一个表的最新记录来更新表

    我试图避免为此解决方案使用循环的冲动 而是使用基于集合的操作 我需要根据最近出现的与另一个表的连接来更新表中的每条记录 我的第一个想法是加入到我需要 最近日期 的表并根据连接条件进行分组 但是使用GROUP BY with UPDATE是无