SQL Server:每月循环一次值到整个月

Posted

技术标签:

【中文标题】SQL Server:每月循环一次值到整个月【英文标题】:SQL Server: loop once a month value to the whole month 【发布时间】:2020-11-26 10:00:54 【问题描述】:

我有一张表,每个月只有一天的值。我想将该值复制到整个月,直到出现新值。结果将是一个表格,其中包含基于最后一个已知值的每月每一天的数据。

有人可以帮我写这个查询吗?

【问题讨论】:

【参考方案1】:

由于缺乏可消耗的样本数据,这未经测试,但这看起来像是一个差距和孤岛问题。在这里你可以统计Yield的非NULL值的数量来分配组“数字”,然后在外部SELECT中得到窗口化的MAX

WITH CTE AS(
    SELECT Yield,
           [Date],
           COUNT(yield) OVER (ORDER BY [Date]) AS Grp
    FROM dbo.YourTable)
SELECT MAX(yield) OVER (PARTITION BY grp) AS yield
       [Date],
       DATENAME(WEEKDAY,[Date]) AS [Day]
FROM CTE;

【讨论】:

【参考方案2】:

您似乎有本月第一天的数据。这表明了另一种方法:

select t.*, t2.yield as imputed_yield
from t cross apply
     (select t2.*
      from t t2
      where t2.date = datefromparts(year(t.date), month(t.date), 1)
     ) t2;

这应该能够利用(date, yield) 上的索引。它确实假设您想要的值是在该月的第一个日期。

【讨论】:

以上是关于SQL Server:每月循环一次值到整个月的主要内容,如果未能解决你的问题,请参考以下文章

试图在 SQL Server 中找到总和的中位数

是否可以一次将整个 VB.NET 数据表插入 SQL Server

PL/SQL练习复合变量: 可以一次传递多个值到变量中。

每 5 分钟更新一次值

对数组中出现的值进行计数,返回一次值

表与视图 SQL Server 的性能