는 방법을 확산하는 연간 금액을 추가로 한달에서 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 에는 테이블은 총 월량(ex. 100 고객 paid$15 에 대한 연례 회원,그래서 내 월 총 금액 것$1500).

그러나 내가 무엇을 하고 싶은 것(나는 단서를 어떻게)은 나눈 금액으로 12 으로 확산에서 미래를 위해 매달 revenue per month. 로에 대한 예 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 쿼리/CTE?

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 반환 여러 행에 대해 같은 달.
  • 할 수 있습 라운드 SUMs 않았기 때문에 어떤 경우로 나누어 12 당신을 줄 수 있는 자리 이상의 소수 이외에 대한 당신이 원하는 돈을(있지만,이 경우에,당신은 수도 중요하게 고려해야 한 잔류).
  • 는 경우에 당신은 정말 단 하나의 트랜잭션 per month(에서 예),당신은 당신이 필요하지 않지 group by.
  • 는 경우 개월 동안 당신은 존재하지 않 테이블에서,이 작동하지 않습니다,하지만 당신은 같은 일을 할 수 있습을 생성하는 테이블의 개월입니다. 예를 들어 있는 경우에 2020-01-01 하지만 아무것도에 2020-02-01,다음 이를 반환하지 않을 것에 대한 행 2021-02-01.
2021-11-23 16:06:20

귀하의 SQL 실행하는가?
Adrian White

@AdrianWhite 네
EdmCoff
1

CTE=설정 데이터 집합

CTE_2=프로 평가 데이터 집합

최종 SQL= 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ý
..................................................................................................................