sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo determinar los valores de los meses que faltan en función de los datos de los meses anteriores en T-SQL

Comenzaría construyendo una tabla de Números que contenga enteros secuenciales del 1 al millón más o menos. Son muy útiles una vez que aprendes a hacerlo.

Por ejemplo, aquí se explica cómo obtener el día 1 de cada mes en 2008:

select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
from Numbers
where n <= 12;

Ahora, puede juntar eso usando APLICACIÓN EXTERNA para encontrar la transacción más reciente para cada fecha así:

with Dates as (
    select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
    from Numbers
    where n <= 12
)
select d.firstOfMonth, t.TransactionValue
from Dates d
outer apply (
    select top 1 TransactionValue
    from Transactions
    where TransactionDate <= d.firstOfMonth
    order by TransactionDate desc
) t;

Esto debería darle lo que está buscando, pero es posible que tenga que buscar un poco en Google para encontrar la mejor manera de crear la tabla de Números.