कैसे प्रसार करने के लिए वार्षिक राशि और फिर से जोड़ें महीने में SQL

0

सवाल

वर्तमान में मैं काम कर रहा हूँ के साथ एक मेज है कि इस तरह दिखता है:

Month     | Transaction          | amount
2021-07-01| Annual Membership Fee| 45
2021-08-01| Annual Membership Fee| 145
2021-09-01| Annual Membership Fee| 2940
2021-10-01| Annual Membership Fee| 1545

के amount उस मेज पर कुल मासिक राशि (पूर्व. मैं 100 ग्राहकों को जो भुगतान किया $15 के लिए वार्षिक सदस्यता है, तो अपने कुल मासिक राशि के लिए किया जाएगा $1500).

लेकिन क्या मैं क्या करना चाहते हैं (और मैं कोई सुराग नहीं है कैसे) है राशि को विभाजित करके 12 और प्रसार यह भविष्य में क्रम में करने के लिए एक मासिक आय प्रति माह. एक उदाहरण के रूप में के लिए 2021-09-01 मैं मिल जाएगा निम्नलिखित हैं:


$2490/12 = $207.5 (dollars per month for the next 12 months)

in 2021-09-01 I would only get $207.5 for that specific month.

On 2021-10-01 I would get $1545/12 = $128.75 plus $207.5 from the previous month (total = $336.25 for 2021-10-01)

And the same operation would repeat onwards. The last period that I would collect my $207.5 from 2021-09-01 would be in 2022-08-01.

मैं सोच रहा था अगर किसी ने मुझे दे सकता है की एक विचार कैसे प्रदर्शन करने के लिए इस में एक SQL क्वेरी/सीटीई?

snowflake-cloud-data-platform sum
2021-11-23 15:36:26
2

सबसे अच्छा जवाब

3

यह मानते हुए सभी वर्ष आप के बारे में परवाह मौजूद अपनी तालिका में, मैं सुझाव है कि कुछ की तरह:

SELECT 
 month, 
 (SELECT SUM(m2.amount/12) FROM mytable m2 WHERE m2.month BETWEEN ADD_MONTHS(m1.month, -11) AND m1.month) as monthlyamount
FROM mytable m1
GROUP BY month
ORDER BY month

प्रत्येक महीने के लिए मौजूद है कि तालिका में, यह रकम 1/12 वीं की वर्तमान राशि से अधिक पिछले 11 महीने का उपयोग कर ( add_months समारोह). मुझे लगता है कि तुम क्या चाहते हो.

कुछ नोट्स/विचार:

  • मैं मान रहा हूँ (पर आधारित स्तंभ नाम) है कि सभी तिथियों में month कॉलम के अंत पर 1 है, तो हम करने की जरूरत नहीं है के बारे में चिंता मिलान दिनों या group by वापसी एकाधिक पंक्तियाँ एक ही महीने के लिए.
  • तुम चाहते हो सकता है के लिए दौर SUMमैं था, के बाद से कुछ मामलों में विभाजित करके 12 दे सकता है आप और अधिक अंक दशमलव के बाद की तुलना में आप चाहते हैं पैसे के लिए (हालांकि, उस मामले में, आप भी हो सकता है पर विचार करने के लिए शेष).
  • यदि आप वास्तव में केवल एक लेन-देन प्रति माह (में उदाहरण के लिए), आप की जरूरत नहीं करने के लिए group by.
  • अगर इस महीने आप के बारे में परवाह नहीं है में मौजूद अपनी मेज है, तो यह काम नहीं करेगा, लेकिन आप एक ही बात करते हैं पैदा करने के लिए एक मेज के महीने. उदाहरण के लिए यदि आप एक राशि पर 2020-01-01 लेकिन कुछ भी नहीं में 2020-02-01, तो यह वापस नहीं होगा के लिए एक पंक्ति 2021-02-01.
2021-11-23 16:06:20

अपने SQL चलाने के लिए?
Adrian White

@AdrianWhite हाँ
EdmCoff
1

सीटीई = सेट अप डेटासेट

CTE_2 = प्रो-दर डेटासेट

अंतिम एसक्यूएल = select future_cal_month,sum(pro_rated_amount) from cte_2 group by 1

with cte as (
select '2021-07-01' cal_month,'Annual Membership Fee' transaction ,45 amount
union all select '2021-08-01' cal_month,'Annual Membership Fee' transaction ,145 amount
union all select '2021-09-01' cal_month,'Annual Membership Fee' transaction ,2940 amount
union all select '2021-10-01' cal_month,'Annual Membership Fee' transaction ,1545 amount) 
, cte_2 as (    
select 
    dateadd('month', row_number() over (partition by cal_month order by 1), cal_month) future_cal_month
    ,amount/12 pro_rated_amount
from 
     cte 
    ,table(generator(rowcount => 12)) v)
select 
  future_cal_month
, sum(pro_rated_amount) 
from 
  cte_2 
group by 
  future_cal_month

enter image description here

2021-11-23 21:00:56

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में