데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

데이터 누계 질문

swimtor 2019.01.12 12:44 Views : 727

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

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
10423 통계 쿼리 질문요 [1] zofarnim 2019.01.12 835
» 데이터 누계 질문 [5] swimtor 2019.01.12 727
10421 AWS RDS에 DB이전 embster 2019.01.10 571
10420 테이블 반환 함수 동적쿼리 방법 문의 드립니다. [2] 난나야78 2019.01.10 1436
10419 쿼리 질문드립니다. [3] 아잉옹 2019.01.09 690
10418 mssql2017 구성관리자질문 [2] 마술 2019.01.09 862
10417 PK, FK 를 설정하지 않는다면? [2] 이유진_301818 2019.01.09 692
10416 각각 컬럼마다 해당값을 가지고 있는 것들의 갯수를 뽑아내고 싶은데 [1] 카루카루 2019.01.08 639
10415 ▶ SQL 초보 쿼리 질문드립니다 [1] ㅇBGT051 2019.01.08 785
10414 특정테이블이 들어간 sp모두 조회하는 방법이 궁금합니다. [4] 아싸라비아콜롬비아 2019.01.07 770
10413 table 반환 함수 파라미터 유효성 확인 문의 [7] 난나야78 2019.01.04 641
10412 저장 프로시저에서 sp_executesql 관련 문의 드립니다. [1] 로티보이 2019.01.03 676
10411 프로시저 내 세미콜론 관련 문의 드립니다. [3] 김삐씨 2019.01.03 827
10410 OLEDB 연결문제 문의드립니다. [2] 나방 2019.01.02 646
10409 쿼리 질문좀 드리겠습니다. [1] 마이스타 2018.12.30 571
10408 컬럼값 비교 삽입 [5] 배움자세 2018.12.29 628
10407 union 뭐가 문제인지요..? [1] 슈토파이터 2018.12.28 800
10406 특정 컬럼에 특수문자가 들어간거만 찾는 방법이 있을까요? [1] neiyan 2018.12.28 595
10405 sql 초보 질문요 [1] YHS 2018.12.27 713
10404 mssql 행이 null이면 다음 값 조회 [2] 전람회 2018.12.27 825





XE Login