您有2个要解决的问题。第一个问题是如何填补空白。第二个问题是为那些缺少的记录填充“计数”字段。
问题1:这可以通过使用
Dates Lookup table或创建一个来解决
recursive common tableexpression。如果可以的话,我建议为此创建一个“日期查询”表。如果您不能创建这样的表,那么您将需要这样的东西。
WITH CTE AS ( SELECt MAX(dt) maxdate, MIN(dt) mindate FROM yourtable ),RecursiveCTE AS ( SELECt mindate dtfield FROM CTE UNIOn ALL SELECt DATEADD(day, 1, dtfield) FROM RecursiveCTE R JOIN CTE T ON R.dtfield < T.maxdate )
这将为您创建一个日期列表,该
MIN日期列表从表中的日期开始,以结束
MAX。
问题2:在这里可以
correlated subquery派上用场(就像我通常在远离它们的地方一样),可以从原始表中获取最后一个cnt:
SELECt r.dtfield, (SELECT TOP 1 cnt FROM yourtable WHERe dt <= r.dtfield ORDER BY dt DESC) cntFROM RecursiveCTE r
- SQL小提琴演示



