使用 WITH 和过度分区困难更新表

Posted

技术标签:

【中文标题】使用 WITH 和过度分区困难更新表【英文标题】:Update table with a WITH and over partition diffuculty 【发布时间】:2017-01-30 19:37:52 【问题描述】:

我正在尝试在表中添加一列,其中包含一系列重复的线性数字,这些数字在 287 处停止并重复。该代码在表更新时起作用,但所有行都是零而不是我想要的数字。 With 子句有效,因为我可以看到它在使用 select 时有效,因为更新有问题。

WITH myupdate (myrownumber) 
 AS (SELECT ( Row_number() 
                OVER ( 
                  partition BY tmc, date 
                  ORDER BY tmc, date, epoch) - 1 ) AS myRowNumber 
     FROM   [dbo].[i40_2016_all]) 
--SELECT * FROM myUpdate 
UPDATE [dbo].[i40_2016_all] 
SET    mod_epoch = myrownumber 
FROM   myupdate 

【问题讨论】:

mysql 既不支持 CTE (with) 也不支持窗口函数 (row_number()`。我正在删除该标签。请使用您真正使用的数据库进行标签。 【参考方案1】:

我的猜测是您使用的是 SQL Server。我认为您想要的语法如下所示:

WITH myUpdate AS (
      SELECT a.*,
             ROW_NUMBER() over (PARTITION BY TMC, DATE ORDER BY TMC, DATE, EPOCH) - 1 AS myRowNumber
      FROM [dbo].[I40_2016_ALL] a
     )
UPDATE myUpdate
    SET MOD_EPOCH = myRowNumber;

【讨论】:

是的,sql server。我一直忘记有不同的版本。 @BenZeddicus 不是版本(例如 2012 或 2016),而是系统; MySQL、SQL Server、Oracle

以上是关于使用 WITH 和过度分区困难更新表的主要内容,如果未能解决你的问题,请参考以下文章

按总和过度分区

SQL Server - 使用 ROWS BETWEEN UNBOUNDED PRECEDING 的分区过度不起作用?

如何处理 hive 分区以提高性能与过度分区

ERROR 1064 (42000) 过度分区语法中的数据库错误

微调 BERT 情绪分析时的过度拟合

过度更新有多糟糕?