sql >> Database >  >> RDS >> Sqlserver

Waarden bepalen voor ontbrekende maanden op basis van gegevens van vorige maanden in T-SQL

Ik zou beginnen met het bouwen van een Numbers-tabel met opeenvolgende gehele getallen van 1 tot een miljoen of zo. Ze zijn erg handig als je het eenmaal onder de knie hebt.

Hier ziet u bijvoorbeeld hoe u de 1e van elke maand in 2008 kunt ontvangen:

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

Nu kun je dat samenvoegen met OUTER APPLY om de meest recente transactie voor elke datum te vinden, zoals:

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;

Dit zou u moeten geven waarnaar u op zoek bent, maar u moet misschien een beetje Googlen om de beste manier te vinden om de Numbers-tabel te maken.



  1. De standaardwaarden van tabelkolommen in Postgres ophalen?

  2. Hoe stop je MySQL bij een Mac OS-installatie?

  3. Selecteer het laatste record uit de rechtertabel bij gebruik van join in mysql

  4. Heeft Mysql een equivalent van @@ROWCOUNT zoals in mssql?