rownum | 날짜 | 누적 회원 수 | 신규 가입 수 |
1 | 2014.03.27 | 5 | 3 |
2 | 2014.03.28 | 7 | 2 |
이렇게 테이블이 출력이 되도록 해야하는데
Comment 5
-
History
2014.03.31 13:23
-
Mr황
2014.03.31 14:00
신경 써 주셔서 감사합니다. 제 질문을 좀 더 쉽게 설명 드리자면, 최종 출력은 위에 제가 만들어놓은 테이블처럼 출력이 되어야하는데, 위는 예시로 올려놓은 것이고, 제가 알고싶은 것은 저 '값'을 '어떻게' 구하느냐 입니다.
select * from (select ROW_NUMBER() OVER(ORDER BY datepart(DD, regdate)) as rownum, datepart(DD, regdate) AS 'day', count(useridx) as 'count' from member GROUP BY DATEPART(DD, regdate)) as #TMP where rownum between 1 and 10
이렇게 하면 rownum과, 신규 가입 수의 값을 대강 구해서 출력할 수 있습니다만, '누적 회원 수'와, '탈퇴 회원 수'는 어떻게 값을 구해야 할지 몰라서 글을 올렸습니다.
테이블은 member가 있으며, 해당 테이블에는 regdate라는 칼럼이 있습니다.
-
spica
2014.03.31 18:55
부끄러운 실력이지만 ... 변수하나에 날짜count 구한후 그 수만큼 WHILE문 돌면서 누적값은 구해봤어요.. .
ROLLUP이나 CUBE라는것도 있는 것같은데 써본적이 없어요 ^^;
CREATE TABLE #TEMP2 (누적 INT, RDATE VARCHAR(8))
DECLARE @V_MAX INT , @V_CNT INT, @V_DATE VARCHAR(8), @V_누적 INT
SET @V_CNT = 1
SET @V_누적 = 0
SELECT @V_MAX = COUNT(A.REGDATE)
FROM(
SELECT REGDATE
FROM #TEMP
GROUP BY REGDATE
)AWHILE(@V_CNT <= @V_MAX)
BEGIN
SELECT @V_누적 = @V_누적 +COUNT(REGDATE), @V_DATE = MAX(REGDATE)
FROM ( SELECT DENSE_RANK() OVER (ORDER BY REGDATE) AS RN, REGDATE FROM #TEMP) A
WHERE A.RN= @V_CNT
INSERT INTO #TEMP2(누적, RDATE)
VALUES (@V_누적, @V_DATE)SET @V_CNT = @V_CNT +1
ENDSELECT * FROM #TEMP2
물론 더 좋은 방법을 고수분들께서 올려주시리라 믿습니돠 ^_^!
-
건우아빠
2014.03.31 22:47
2008?부터는 누적함수가 있었던것 같은데....찾아보세요.. 2010인가?declare @dd varchar(10)set @dd = '2014-03-27' ;with res as(select '25' no , '홍길동25' name , '2014-03-25' dd ,'가입' Gb union allselect '26' no , '홍길동26' name , '2014-03-26' dd ,'가입' Gb union allselect '27' no , '홍길동27' name , '2014-03-27' dd ,'가입' Gb union allselect '28' no , '홍길동28' name , '2014-03-27' dd ,'가입' Gb union allselect '29' no , '홍길동29' name , '2014-03-27' dd ,'가입' Gb union allselect '30' no , '홍길동30' name , '2014-03-28' dd ,'가입' Gb union allselect '31' no , '홍길동31' name , '2014-03-28' dd ,'가입' Gb ) ,result as (select case when dd < @dd then '0000-00-00' else dd end in_dt, COUNT(*) cntfrom resgroup by case when dd < @dd then '0000-00-00' else dd end )select a.in_dt [날짜] , SUM(b.cnt ) [누적 회원 수] , a.cnt [신규 가입 수]from result a join result b on a.in_dt >= b.in_dtgroup by a.in_dt, a.cnthaving a.in_dt > '0000-00-00' -
Mr황
2014.04.01 17:02
답변 정말 감사드립니다. 덕분에 신규가입과, 누적회원까지는 문제없이 완료했네요. 다른분들도 답변 감사드립니다.
이제 탈퇴한 회원수 체크 및 주별, 월별 체크만 남았네요..
이미 컬럼에 기간, 누적 회원 수, 신규 가입 수, 탈퇴 회원 수 값들이 있으니
출력을 원하는 아래는 그냥 Select 하면 되지 않을까여..
rownum 부분만 rank 함수로 구하고여..
글쓰신 내용이 100% 이해가 되지 않은 상태에서 작성한 답글임도 양해부탁드릴꼐여