如何使用表 B 和表 C 的连接返回的按日期计数更新表 A 中的按日期计数

吉尔

我可以使用临时表来做到这一点。是否可以在单个更新查询中执行这两个步骤?TargetTable 中已经存在所有可能的日期(不需要插入)。我希望提高效率,因为它经常在批量数据定期倒入表 T2 时运行。

表 T1:在该批次中插入或更新的单个日期列表

表 T2:datetime2(3) 字段后跟几个数据字段,对于任何特定日期可能是数千个

目标:更新 TargetTable:日期字段后跟 int 字段以按日期保存总记录(可能刚刚进入 T2 或可能是附加到 T2 中现有记录的附加记录)

select T1.date as TargetDate, count(*) as CountF1 
    into #Temp
    from T1 inner join T2
    on T1.date = cast(T2.DateTime as date)
    group by T1.date

update TargetTable 
    set TargetField1 = CountF1
    from #Temp inner join TargetTable 
    on TargetDate = TargetTable.Date
莫腾

我同意 Zohar Peled 的建议。使用通常缩写为“CTE”的“通用表表达式”。CTE 可以替换您的场景中的临时表。您可以使用 WITH 关键字编写 CTE,并且请记住,在许多情况下,您需要在 WITH 关键字之前(或者如果您愿意,可以在前一条语句的末尾)有一个分号。解决方案如下所示:

;WITH CTE AS
(
SELECT T1.date AS TargetDate, Count(*) AS CountF1
    FROM T1 INNER JOIN T2
    ON T1.date = Cast(T2.DateTime AS DATE)
    GROUP BY T1.date
)
UPDATE TargetTable
    SET TargetField1 = CTE.CountF1
    FROM CTE INNER JOIN TargetTable
    ON CTE.TargetDate = TargetTable.Date;

以下是有关通用表表达式的更多信息:

https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql

完成此操作后,您可能会从中受益的另一件事是向表 T2 添加一个新列,数据类型为 DATE。这个新列的值可能是 Cast(T2.DateTime AS DATE)。它甚至可能是(持久化的)计算列。然后在该新列上添加索引。如果然后加入新列(而不是加入表达式 Cast(...) ),它可能运行得更快,具体取决于数据的分布。判断它是否运行得更快的唯一方法是尝试一下。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从表中我得到日期之间的计数和日期名称

按嵌套表计数排序

如何使用T-SQL获取日期之间的计数并将行的计数写入表中?

如何使用开始日期和结束日期从SQL表中按日扩展的行输出?

按对/数据透视表计数

按计数对R中的表进行排序

是否可以在历史事件表上按日期创建计数?

如何使用jquery按日期过滤表

如何在datetime SQL列中按日期和这些日期的8小时间隔进行分组和计数?

按表b日期联接和分组表a行

连接表按日期过滤

在“联合”表上按日期计数实例

PostgreSQL:如果表中没有日期请求,然后为0,如何按日期计数请求?

如何使用表B中的条件从表A中选择计数

C#MVC4 Linq-按日期或日期和时间过滤表

使用条件将表A和表B中的记录插入表C的SQL语句

在具有不同计数的Excel数据透视表中按星期对日期进行分组

使用表 a 和表 b 更新

如果值存在于 2 个表之一(例如 B 和 C)中,如何使用表 A 中的值插入或更新数据?

如何按日期和日期计数在ggplot2中创建折线图

按日期和参数计数的列联表

Laravel 按列的日期总和连接表

如何使用 Laravel 按日期对记录进行分组和计数?

按日期和外部表中的 ID 对 COUNT 进行分组

SQL 按日期/小时/分钟和连接表分组记录

如何从 1 个表中按日期获取记录并更新 Postgresql 中的其他表?

当表 C 中只有共享数据时,如何从表 B 更新表 A?

如果两个表中的日期相同,则多个 SQL 左连接返回相同的计数值

按日期计数和聚合