sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man bestämmer värden för saknade månader baserat på data från tidigare månader i T-SQL

Jag skulle börja med att bygga en Numbers-tabell som innehåller sekventiella heltal från 1 till en miljon eller så. De kommer väl till pass när du väl får kläm på det.

Så här får du till exempel den 1:a varje månad 2008:

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

Nu kan du sätta ihop det med OUTER APPLY för att hitta den senaste transaktionen för varje datum så här:

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;

Det här borde ge dig det du letar efter, men du kanske måste googla runt lite för att hitta det bästa sättet att skapa Numbers-tabellen.



  1. Spring Boot JPA MySQL :Det gick inte att fastställa en lämplig drivrutinsklass

  2. Hur kan jag lägga till en sträng i ett befintligt fält i MySQL?

  3. Finns det ett Spring Batch 3-uppgraderingsskript för MySQL?

  4. Hur TO_BASE64()-funktionen fungerar i MySQL