Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách xác định giá trị cho các tháng bị thiếu dựa trên dữ liệu của các tháng trước trong T-SQL

Tôi sẽ bắt đầu bằng cách xây dựng một bảng Numbers chứa các số nguyên tuần tự từ 1 đến một triệu hoặc lâu hơn. Chúng thực sự hữu ích khi bạn hiểu rõ.

Ví dụ:đây là cách lấy ngày 1 hàng tháng trong năm 2008:

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

Bây giờ, bạn có thể kết hợp điều đó lại với nhau bằng cách sử dụng ÁP DỤNG NGOÀI TRỜI để tìm giao dịch gần đây nhất cho mỗi ngày như sau:

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;

Điều này sẽ cung cấp cho bạn những gì bạn đang tìm kiếm, nhưng bạn có thể phải Google xung quanh một chút để tìm cách tốt nhất để tạo bảng Numbers.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SET DATEFIRST - Đặt Ngày đầu tiên trong tuần trong SQL Server

  2. Các tính năng mới của SQL Server 2019

  3. SQL Server:kết hợp nhiều hàng thành một hàng

  4. Đếm hàng cho tất cả các bảng cùng một lúc

  5. Chỉ mục không sử dụng máy chủ SQL