Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да определим стойности за липсващи месеци въз основа на данни от предходни месеци в T-SQL

Бих започнал с изграждането на таблица с числа, съдържаща последователни цели числа от 1 до милион или нещо повече. Те са много полезни, след като се овладеете.

Например, ето как да получите 1-во число на всеки месец през 2008 г.:

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

Сега можете да съберете това с помощта на OUTER APPLY, за да намерите най-новата транзакция за всяка дата по следния начин:

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;

Това трябва да ви даде това, което търсите, но може да се наложи да потърсите малко в Google, за да намерите най-добрия начин да създадете таблица с числата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Множество реда до една стойност, разделена със запетая, в Sql Server

  2. CONVERT() срещу TRY_CONVERT в SQL Server:Каква е разликата?

  3. Добавете стойност по подразбиране на полето за дата и час в SQL Server към времева марка

  4. Клауза VALUES в SQL Server

  5. Добавяне на колона с уникален идентификатор и добавяне на по подразбиране за генериране на ново ръководство