sql >> Databáze >  >> RDS >> Sqlserver

Jak určit hodnoty pro chybějící měsíce na základě dat z předchozích měsíců v T-SQL

Začal bych tím, že vytvořím tabulku Numbers obsahující sekvenční celá čísla od 1 do milionu nebo tak nějak. Když se do toho pustíte, budou se vám opravdu hodit.

Zde je například návod, jak získat 1. den každého měsíce v roce 2008:

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

Nyní to můžete dát dohromady pomocí OUTER APPLY a najít nejnovější transakci pro každé datum, například takto:

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;

To by vám mělo poskytnout to, co hledáte, ale možná budete muset trochu prohledat Google, abyste našli nejlepší způsob, jak vytvořit tabulku Numbers.



  1. Vlastní tabulka Wordpress nebo vlastní typy příspěvků?

  2. Nainstalujte webový server ve Windows XP s Apache2, PHP5 a MySQL4 – část 1

  3. MATCH PROTI s více sloupci v MySQL

  4. Jak zjistíte velikost disku tabulky Postgres / PostgreSQL a její indexy