Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak określić wartości brakujących miesięcy na podstawie danych z poprzednich miesięcy w T-SQL?

Zacząłbym od zbudowania tabeli Numbers zawierającej sekwencyjne liczby całkowite od 1 do około miliona. Przydają się, gdy już to zrozumiesz.

Na przykład, oto jak uzyskać pierwszy dzień każdego miesiąca w 2008 roku:

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

Teraz możesz to połączyć, korzystając z funkcji OUTER APPLY, aby znaleźć najnowszą transakcję dla każdej daty, w następujący sposób:

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 powinno dać ci to, czego szukasz, ale być może będziesz musiał trochę poszukać w Google, aby znaleźć najlepszy sposób na utworzenie tabeli liczb.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie RegEx w SQL Server

  2. SqlServer:Logowanie nie powiodło się dla użytkownika

  3. Połącz SQL Server z SugarCRM

  4. Konwertuj milisekundy UTC na DATETIME w serwerze SQL

  5. Operator ampersand (&) w SQL Server klauzula WHERE