Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

विंडो फ़ंक्शंस - रीसेट के साथ कुल चल रहा है

यह एक सेट-आधारित समाधान का उपयोग करके किया जा सकता है:

1. सामान्य चलने वाले कुल की गणना करें (इसे RT कहते हैं)

2. चल रहे न्यूनतम RT की गणना करें (इसे MN कहते हैं)

जब MN ऋणात्मक होता है, -MN वह कुल मात्रा होती है जिसकी आपको अब तक पूर्ति करनी होती है। जब MN ऋणात्मक हो, तो फिर से भरना_rt -MN होने दें। तो, नया चल रहा कुल (इसे new_rt कहते हैं) rt + पुनःपूर्ति_आरटी है। और यदि आपको आवश्यक वर्तमान पुनःपूर्ति मात्रा वापस करने की आवश्यकता है, तो वर्तमान से पर्विअस रीफ़िल_आरटी (LAG का उपयोग करके) घटाएं।

यहाँ संपूर्ण समाधान क्वेरी है:

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);
चीयर्स, इत्ज़िकी

  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 सर्वर 2016 क्वेरी स्टोर GUI की खोज करना

  2. वर्तमान में SQL सर्वर में उपयोग की जा रही भाषा प्राप्त करें

  3. SQL सर्वर (T-SQL) में विभाजन कार्यों की सूची लौटाएँ

  4. SQL सर्वर में varchar को डेटाटाइम में बदलें

  5. 2 तिथियों के बीच प्रत्येक तिथि के लिए रिकॉर्ड की संख्या की गणना करें