Anda memiliki 2 masalah yang Anda coba selesaikan. Masalah pertama adalah bagaimana mengisi kesenjangan. Masalah kedua adalah mengisi bidang Hitungan untuk catatan yang hilang itu.
Masalah 1:Ini dapat diselesaikan dengan menggunakan Dates Lookup table
atau dengan membuat recursive common table expression
. Saya akan merekomendasikan membuat tabel Pencarian Tanggal untuk ini jika itu adalah opsi. Jika Anda tidak dapat membuat tabel seperti itu, maka Anda akan membutuhkan sesuatu seperti ini.
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
)
Itu akan membuat Anda daftar tanggal yang dimulai dengan MIN
tanggal di tabel Anda dan diakhiri dengan MAX
.
Masalah 2:Di sinilah correlated subquery
akan berguna (sebanyak saya biasanya menjauh dari mereka) untuk mendapatkan cnt terakhir dari tabel asli Anda:
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r