Veo que no has leído bien el artículo o no lo has entendido... En el ejemplo "Encontrar las fechas que faltan:", el punto de partida es una tabla con un solo campo de fecha (tabla fecha faltante), que es exactamente lo mismo que tu tienes en tu tabla bitácora.
A partir de esa tabla, crea una consulta (Consulta1) que devuelve las fechas más baja y más alta para cada grupo (campo "nombre" en el ejemplo). En tu caso, según lo que necesites, puedes hacerlo por paciente (la consulta tendrá tantos registros como pacientes tengas) o en general (la consulta devolverá un solo registro)
Con esa consulta y la tabla "números", genera todas las fechas entre esas dos fechas en la Consulta2
Y por último, con la tabla inicial y la consulta2, busca las fechas que no figuran en la tabla.
En tu caso concreto, bien en la consulta2 o en la final, tendrías que añadir una cosilla, que te filtre solo las fechas que corresponden a lunes-viernes.
Dicho esto, si tu tabla se llama TBitacora y tiene el campo Fecha_Citado, y una vez que crees la tabla Nums (según el script comentado arriba) la siguiente consulta te devolverá los días que no tienen cita siempre que sean lunes, martes, miércoles, jueves o viernes:
SELECT TOP (100) PERCENT Consulta2.Lasfechas, datename(WEEKDAY,Consulta2.Lasfechas) AS DiaSemana
FROM (SELECT TOP (100) PERCENT DATEADD(DAY, dbo. Nums.n, Consulta1. Inicio) AS Lasfechas
FROM dbo.Nums INNER JOIN
(SELECT MIN(Fecha_Citado) AS Inicio, MAX(Fecha_Citado) AS Final
FROM dbo.TBitacora) AS Consulta1 ON DATEADD(DAY, dbo.Nums.n, Consulta1.Inicio) <= Consulta1.Final
WHERE (DATEPART(WEEKDAY, DATEADD(DAY, dbo.Nums.n, Consulta1.Inicio)) IN (1, 2, 3, 4, 5))
ORDER BY Lasfechas) AS Consulta2 LEFT OUTER JOIN
dbo.TBitacora ON Consulta2.Lasfechas = dbo.TBitacora.Fecha_Citado
WHERE (dbo.TBitacora.Fecha_Citado IS NULL)
ORDER BY Consulta2. Lasfechas
Le he añadido un campo para que veas el día de la semana.
Si lo prefieres hacer "por partes":
Consulta1:
SELECT MIN(Fecha_Citado) AS Inicio, MAX(Fecha_Citado) AS Final FROM dbo.TBitacora
Consulta2:
SELECT TOP (100) PERCENT DATEADD(DAY, dbo.Nums.n, dbo.Consulta1.Inicio) AS Lasfechas
FROM dbo.Nums INNER JOIN dbo.Consulta1 ON DATEADD(DAY, dbo.Nums.n, dbo.Consulta1.Inicio) <= dbo.Consulta1.Final
WHERE (DATEPART(WEEKDAY, DATEADD(DAY, dbo.Nums.n, dbo.Consulta1.Inicio)) IN (1, 2, 3, 4, 5)) ORDER BY Lasfechas
Consulta final:
SELECT TOP (100) PERCENT dbo.Consulta2.Lasfechas, datename(WEEKDAY,dbo.Consulta2.Lasfechas) AS DiaSemana
FROM dbo.Consulta2 LEFT OUTER JOIN
dbo.TBitacora ON dbo.Consulta2.Lasfechas = dbo.TBitacora.Fecha_Citado
WHERE (dbo.TBitacora.Fecha_Citado IS NULL)
ORDER BY dbo. Consulta2. Lasfechas
que son las mismas consultas del artículo, adaptadas a la sintaxis SQLServer