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:每月循环一次值到整个月的主要内容,如果未能解决你的问题,请参考以下文章