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

Chức năng cửa sổ - Chạy Tổng cộng khi đặt lại

Điều này có thể được thực hiện bằng cách sử dụng giải pháp dựa trên tập hợp:

Tính toán tổng số chạy bình thường (gọi nó là RT)

2. Tính toán mức tối thiểu đang chạy của RT (gọi nó là MN)

Khi MN âm, -MN là tổng số lượng bạn phải bổ sung cho đến nay. Hãy bổ sung_rt là -MN khi MN là âm. Vì vậy, tổng số đang chạy mới (gọi nó là new_rt) là rt + Replace_rt. Và nếu bạn cần trả lại số lượng bổ sung hiện tại cần thiết, hãy trừ số lượng bổ sung hiện tại (sử dụng LAG) cho hiện tại.

Đây là truy vấn giải pháp hoàn chỉnh:

with c1 as
(
  select *,
    sum(qty) over(order by tdate rows unbounded preceding) as rt
  from tx
),
c2 as
(
  select *,
    -- when negative, mn is the total qty that had to be
    -- replenished until now, inclusive
    min(rt) over(order by tdate rows unbounded preceding) as mn_cur
  from c1
)
select tdate, qty, rt,
  replenish_rt - lag(replenish_rt, 1, 0) over(order by tdate) as replenish,
  rt + replenish_rt as new_rt
from c2
  cross apply(values(case when mn_cur < 0 then -mn_cur else 0 end)) as a1(replenish_rt);
Chúc mừng, Itzik

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chế độ xem trong SQL Server

  2. Khóa tổng hợp duy nhất của SQL Server của hai trường với tự động tăng trường thứ hai

  3. Nhóm người dùng máy chủ Charlotte SQL:Khắc phục các truy vấn chậm. Nhanh.

  4. Cách chọn JSON lồng nhau trong SQL Server với OPENJSON

  5. Tìm kiếm mờ SQL Server với Phần trăm so khớp