데이터 누계 질문

swimtor 2019.01.12 12:44 Views : 804

데이터 누계 질문드립니다.
일별 계산은 되는데... 월별, 분기별, 연도별 누계를 계산하려니 잘 안됩니다.

use tempdb
go
if object_id ('dbo.#t') is not null
drop table dbo.#t
go

print 'begin-------------------------'
--iDate: primary key
--iVal: 매일 매일 연속 누적됨
create table #t(idate smalldatetime, iVal int)
insert #t(idate,ival) values('2018-12-31',90)
insert #t(idate,ival) values('2019-01-01',100)
insert #t(idate,ival) values('2019-01-02',110)
insert #t(idate,ival) values('2019-01-03',120)
insert #t(idate,ival) values('2019-01-04',130)
insert #t(idate,ival) values('2019-01-05',140)
insert #t(idate,ival) values('2019-01-06',250)
insert #t(idate,ival) values('2019-02-10',400)
insert #t(idate,ival) values('2019-02-16',410)

go

print 'result-------------------------'
select x.idate, x.ival as to_day, y.ival as be_day, x.ival-y.ival as day_val
from
(select * , (select count(*) from #t as b  where b.idate<a.idate) as cnt1
from #t as a) as x left join 
(select * , (select count(*)+1 from #t as b  where b.idate<a.idate) as cnt1
from #t as a) as y on x.cnt1=y.cnt1
where x.idate between '2019-01-01' and '2019-12-31'


-- 결과값:  계산 결과는  금일,     전일,       일별 값,       (일별누계,  월별누계, 분기별 누계, 연도별 누계) 컬럼을 추가하고 싶습니다.
--idate                   to_day      be_day      day_val
----------------------- ----------- ----------- -----------
2019-01-01 00:00:00     100         90          10
2019-01-02 00:00:00     110         100         10
2019-01-03 00:00:00     120         110         10
2019-01-04 00:00:00     130         120         10
2019-01-05 00:00:00     140         130         10
2019-01-06 00:00:00     250         140         110
2019-02-10 00:00:00     400         250         150
2019-02-16 00:00:00     410         400         10

(8개 행이 영향을 받음)

go

print '누계 계산 Select 문 오류가 발생합니다'
select x.idate, x.ival as to_day, y.ival as be_day, x.ival-y.ival as day_total
,(select sum(ival) 
  from #t 
  where  idate between '2019-01-01' and '2019-12-31' 
and idate)<x.idate) as day_total
,(select sum(ival) 
  from #t 
  where  idate between '2019-01-01' and '2019-12-31' 
and datepart(m,idate)=datepart(m,x.idate)) as mon_total
,(select sum(ival) 
  from #t 
  where  idate between '2019-01-01' and '2019-12-31' 
and datepart(q,idate)=datepart(q,x.idate)) as qq_total
from
(select * , (select count(*) from #t as b  where b.idate<a.idate) as cnt1
from #t as a) as x left join 
(select * , (select count(*)+1 from #t as b  where b.idate<a.idate) as cnt1
from #t as a) as y on x.cnt1=y.cnt1
where x.idate between '2019-01-01' and '2019-12-31'
go



조언을 바랍니다.


좋은 주말 되시구요~~
No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 23706
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12433
10440 DB 용량이너무커서 축소를 할려고 합니다 [3] 더블제니 2019.01.29 2658
10439 서브쿼리를 이용해서 컬럼 내용을 가져올때... [1] 엘로이 2019.01.29 985
10438 SQL 쿼리에서 Save Result as 했을때.. 문제점 확인 부탁드립니다. ilkoo 2019.01.29 678
10437 sql 조회오차 왜생기는건가요? ㅠㅠ [4] Zaki 2019.01.28 912
10436 중복 Data 중 가장 최근 날짜의 Data 만 불러오는 방법 [1] 김다빈 2019.01.27 1555
10435 데이터 정렬 [4] scsheva 2019.01.24 1077
10434 ms sql 서버 권한 설정 질문 드립니다. [2] 식뽕 2019.01.24 640
10433 뉴비입니다..! 안녕하세요 대량 UPDATE 질문드립니다. [4] 호키포키 2019.01.23 744
10432 mdf파일 깨졌을때 복부 방법 문의드립니다. [2] nico2 2019.01.22 1014
10431 MASTER DB 복원 문의 sh17 2019.01.22 969
10430 데이터 배열 관련 질문입니다.ㅠ [2] scsheva 2019.01.21 789
10429 sql 암호 자동으로 변경이 되네요 뉴곰이 2019.01.20 752
10428 쿼리 암호화 질문입니다. [3] 희망나라 2019.01.17 867
10427 SQL Server always on 개념이 어떻게 되나요...ㅠㅠ? [1] Mase 2019.01.16 876
10426 통계쿼리 관련 질문 있습니다. [2] 아잉옹 2019.01.16 1216
10425 안녕하세요 SQL Server 튜닝 관련 질문입니다. [7] 앙버터 2019.01.15 900
10424 디비 복원시.. 내부 작업 수행중 불일치 냥냥 2019.01.14 1172
10423 통계 쿼리 질문요 [1] zofarnim 2019.01.12 914
» 데이터 누계 질문 [5] swimtor 2019.01.12 804
10421 AWS RDS에 DB이전 embster 2019.01.10 629





XE Login