在日期範圍內2017-02-01 - 2017-02-10,我正在計算運行餘額。 我有我們缺少數據的日子,如何將這些缺失的日期與前幾天的餘額一起包括在內?爲缺失數據添加一行
示例數據:
我們缺少了2017-02-04,2017-02-05和2017年2月6日的數據,我怎麼會在查詢中添加一行與以前的餘額? 日期範圍是一個參數,所以可以更改....
我可以使用類似滯後函數的東西嗎?
在日期範圍內2017-02-01 - 2017-02-10,我正在計算運行餘額。 我有我們缺少數據的日子,如何將這些缺失的日期與前幾天的餘額一起包括在內?爲缺失數據添加一行
示例數據:
我們缺少了2017-02-04,2017-02-05和2017年2月6日的數據,我怎麼會在查詢中添加一行與以前的餘額? 日期範圍是一個參數,所以可以更改....
我可以使用類似滯後函數的東西嗎?
我會傾向於使用遞歸CTE,然後填寫值。下面是使用outer apply
一種方法:
with dates as (
select mind as dte, mind, maxd
from (select min(date) as mind, max(date) as maxd from t) t
union all
select dateadd(day, 1, dte), mind, maxd
from dates
where dte < maxd
)
select d.dte, t.balance
from dates d outer apply
(select top 1 t.*
from t
where t.date <= d.dte
order by t.date desc
) t;
您可以通過如下理貨表生成日期:
Declare @d1 date ='2017-02-01'
Declare @d2 date ='2017-02-10'
;with cte_dates as (
Select top (datediff(D, @d1, @d2)+1) Dates = Dateadd(day, Row_Number() over (order by (Select NULL))-1, @d1) from
master..spt_values s1, master..spt_values s2
)
Select * from cte_dates left join ....
,做左加入到你的餐桌,並獲得運行總計
添加到日期範圍& CTE的解決方案,我已經在我剛剛離開加入到他們衆多數據庫創建日期維度表。
有免費的腳本在線爲SQL Server創建日期維表。我強烈推薦他們。此外,它可以使其他時間段的聚合效率更高(例如季度,月份,年份等)。