Sql 使用with和over分区diffuculty更新表

Sql 使用with和over分区diffuculty更新表,sql,sql-server,common-table-expression,window-functions,Sql,Sql Server,Common Table Expression,Window Functions,我试图在一个表中添加一列,该列包含一系列重复的线性数,这些线性数在287处停止并重复。代码的工作原理是表更新,但所有行都是零,而不是我想要的数字。With子句起作用,因为我可以看到它在使用select时起作用,因为更新中出现了一些问题 WITH myupdate (myrownumber) AS (SELECT ( Row_number() OVER ( partition BY tmc, date

我试图在一个表中添加一列,该列包含一系列重复的线性数,这些线性数在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 

我猜您正在使用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;

MySQL既不支持CTE(
with
)也不支持窗口函数(row_number()`)。我正在删除该标记。请使用您真正使用的数据库进行标记。是的,sql server。我一直忘了有不同的版本。@BenZeddicus不是版本(例如2012或2016),而是系统;MySQL、sql server、Oracle