使用 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 的分区过度不起作用?