檢索日期範圍內具有零值的缺失日期
原始查詢檢索兩個日期之間的數據,但排除了缺失的日期。要包含缺失的日期並為缺失的資料分配零值,我們可以利用一種稱為「日期標記」的技術。
標記缺失日期
遞歸公用表表達式(CTE)可用來產生指定範圍內的一系列日期。 CTE 名為 d,從範圍的第一個日期開始,並遞歸增加一天,直到到達結束日期。
;with d(date) as ( select cast('10/01/2012' as datetime) union all select date+1 from d where date < '10/15/2012' )
加入現有資料
接下來,我們在CTE d 與原始資料表temp (t) 之間執行左外連接,以擷取每個日期的現有資料。如果 temp 中存在日期,則使用該值;否則,我們會取代零。
select t.ID, d.date CDate, isnull(t.val, 0) val from d left join temp t on t.CDate = d.date order by d.date OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart
有關 MAXRECURSION 的注意事項
OPTION (MAXRECURSION 0) 子句可防止查詢因日期範圍內的過度遞歸而失敗太大了。您可以調整該值以適合您的特定資料範圍。
透過使用此技術,我們可以檢索兩個日期之間的所有日期,包括缺失的日期,同時確保缺失的值表示為零。
以上是如何在 SQL 查詢中以零值填入缺少的日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!