【发布时间】:2016-09-04 08:02:23
【问题描述】:
对于这个问题看起来多么复杂,我提前道歉,但这就是我要处理的问题。我有一张表,里面有 500 万多条记录。在这 500 万多条记录中,我有大约 185,000 个唯一值,我称之为 Column1。 Column1 是一个 varchar 字段。然后我有一个日期字段,我将其称为 Column2,它是一个日期字段,范围从“2005-01-01”到当前日期。对于每条记录,都有一个浮点字段,我将其称为 Column3。 Column3 保存该特定记录的当前汇率。然后有一个不同的浮点字段,我将其称为 Column4。该字段包含我需要设置的最后一个速率字段,该字段等于我从 Column2 获得的上个月 Column3 的值。棘手的部分是我需要为 Column1 的每个唯一值执行此操作。我希望这是有道理的。现在我在 Column4 中的所有数据都是空的,但我希望它看起来像你在下面看到的那样。
例如:
Column1 Column2 Column3 Column4
Record1 2005-01-01 6.25 6.25
Record2 2005-01-01 5.625 5.625
Record3 2005-01-01 4.75 4.75
Record1 2005-02-01 6.5 6.25
Record2 2005-02-01 5.625 5.625
Record3 2005-02-01 4.75 4.75
Record1 2005-03-01 6.75 6.5
Record2 2005-03-01 5.625 5.625
Record3 2005-03-01 5 4.75
如您所见,在某些情况下,每个月的费率都保持不变,就像 Record2 一样。但是,有时它会像 Record1 一样经常更改。还有其他时候它只改变一次,就像 Record3 一样。请让我知道您的建议,并提前感谢您。
【问题讨论】:
-
这可能比你想象的要容易。如果您可以提供一些详细信息,我们可以提供帮助。这是一个很好的起点。 spaghettidba.com/2015/04/24/…
-
Column4 中的前 3 个值应该为 NULL,因为它们没有以前的记录。如果您使用窗口函数,例如,您的任务非常简单。
ROW_NUMBER(). -
@John Cowles_关于
column2的一个问题:总是yyyy-MM-01吗?如果不是,当column2是2005-03-31或2005-03-30或2005-01-02时,column4应该是什么? -
@peter.petrov 你是对的。为了提供示例,我使用了这些日期,但完成后 '2005-01-01' 中的所有值最终都将为 NULL。
-
@PhamX.Bach 该日期将始终在每月的第一天。我运行另一个更新语句,将值硬编码为当月的第一天。所以数据库中永远不会有 -2005-03-30 或 2005-01-02 的实例。
标签: sql sql-server sql-server-2008 tsql sql-update