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

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

안녕하세요


기간은 2014-01-01 부터 2014-12-31 까지 로그인 한 기록을 추출 하는 내용인데요.

연속 3개월 접속 id 를 뽑는겁니다. mssql 이구요

USER_LOGIN 테이블에 user_inID (로그인 한 ID), user_indate(로그인 한 날짜) 등등 로그인시 가져올수있는 기록들은 다 기록됩니다.

쿼리--------------------------------------------------------------

select count(*)
from(
select
 A.user_inID,
 STUFF((
 select DISTINCT ','+
 (case when CONVERT(char(7),UL1.user_indate,120)='2014-01' THEN '1'
       when CONVERT(char(7),UL1.user_indate,120)='2014-02' THEN '2'
       when CONVERT(char(7),UL1.user_indate,120)='2014-03' THEN '3'
       when CONVERT(char(7),UL1.user_indate,120)='2014-04' THEN '4'              
       when CONVERT(char(7),UL1.user_indate,120)='2014-05' THEN '5'              
       when CONVERT(char(7),UL1.user_indate,120)='2014-06' THEN '6'
       when CONVERT(char(7),UL1.user_indate,120)='2014-07' THEN '7'
       when CONVERT(char(7),UL1.user_indate,120)='2014-08' THEN '8'
       when CONVERT(char(7),UL1.user_indate,120)='2014-09' THEN '9'
       when CONVERT(char(7),UL1.user_indate,120)='2014-10' THEN 'a'
       when CONVERT(char(7),UL1.user_indate,120)='2014-11' THEN 'b'    
       when CONVERT(char(7),UL1.user_indate,120)='2014-12' THEN 'c' else '0' END)

       from USER_LOGIN as UL1
       where UL1.user_inID = A.user_inID and CONVERT(char(7),UL1.user_indate,120) BETWEEN '2014-01' and '2014-02'
       group by UL1.user_indate
       FOR XML PATH('')), 1, 1, '') as num

from
(
 SELECT DISTINCT user_inID, count(*) as cnt
 FROM USER_LOGIN
 where CONVERT(char(7),user_indate,120) BETWEEN '2014-01' and '2014-12'
 group by user_inID having count(*) > '2'
) as A
) as re_UL
where re_UL.number like '%2,3,4%'

-----------------------------------------------------------------------------------------


이렇게 짰습니다. 급하다보니깐..

출력은 ID랑 DATE 만 나오게 해서 DATE에 해당 아이디 로그인 시간을  , (콤마)로 연결 해주었습니다.

 group by user_inID having count(*) > '2' 부분은 연속 4개월 접속해도 연속 3개월 접속한거니깐 이렇게 처리 해주었구요.

where re_UL.number like '%2,3,4%'  << 이부분에서 1,2,3 이라던지 2,3,4 라던지 연속 숫자를 넣어줘서 전체 카운팅을 했습니다.


짜고나서 생각해보니 만약 이게 10년 대상을 월별로 추출 하면 엄천난 노가다가 필요 할꺼 같더라구요.

그래서

첫번째 질문은 위 쿼리를 기간을 대량으로 잡았을경우 처리 할수있는 쿼리를 부탁드립니다.


두번재는 위와 조금 관련 된거지만 (위 쿼리를 보시면 날짜를 코드와 했습니다.)

A1    |      A2

--------------------------------------

a       |  123abc

b       |  456abczxc

c       |  123zxc

d       |  123

e       |  123456

이 테이블에서 

A2 의 값을 중심으로 123이 들어 갔있으면 re_A,

                                     456이 들어 가있으면 re_B,

                                     abc 가 들어 가있으면 re_C

로 하여 그룹을 지어서 카운팅 하는 방법 가르켜 주세요.

결과 (re_A는 a, b,d,e로 4개,  re_B는 b,e로 2개, re_C는 a,b로 2개 )

A1    |  A2

----------------------

re_A |  4

re_B |  2

re_C |  2


부탁 드립니다!!

No. Subject Author Date Views
8713 로그인 계정 별 권한 스크립트 [3] 양아치베이비 2015.05.12 2818
8712 도움이필요합니다.] oci_define_by_name 질문입니다. [4] 니징구 2015.05.11 4164
8711 Update문 한번으로 모든 레코드의 값을 바꾸고 싶습니다. [2] 컴맹 2015.05.11 2638
» 로그인 접속 기간 쿼리 문의입니다. [1] 짬자면굿 2015.05.09 2913
8709 페이징될 실제 페이지 번호 미리 알기 [1] DDM 2015.05.08 3433
8708 update 문의 [1] 준후택 2015.05.08 2347
8707 DB 유효 공간 이유진_301818 2015.05.07 2436
8706 날짜계산 ! :) [5] 마힐링 2015.05.07 3179
8705 데이터가 많을 경우 적을경우와 비교해서 인덱스 삭제시 시간이 많이 걸리나요? [1] 로쏘네리 2015.05.07 2264
8704 sp_send_dbmail db메일전송 권한관련 질문 [1] 풀내기vber 2015.05.07 4468
8703 스키마 삭제 [1] hhhh 2015.05.07 2439
8702 유지관리 계획작업시 네트워크 드라이브 백업 문의 [4] jump76821 2015.05.07 3565
8701 space에 간혹 ? 가 들어 갑니다. 닉네임중복 2015.05.06 2150
8700 rollback...ㅜ.ㅜ [1] 마힐링 2015.05.06 2280
8699 SQL 프로시저 관련 질문 [1] 산들마을호랑이 2015.05.06 2512
8698 sql 문자열 관련 쿼리질문드립니다. [2] 초보ㅠㅠ 2015.05.04 2212
8697 새로 컬럼을 가로로 보여줄수 없을까요? [1] neiyan 2015.05.04 2211
8696 union all 로 했을 때 데이터 형식 varchar을(를) numeric(으)로 변환하는 중 오류가 발생했습니다. [1] taz2315 2015.05.04 3845
8695 sql 서버 데이터가져오기를 하다가 오류가 발생했습니다. [1] 가네탑 2015.05.02 2631
8694 합산 관련 쿼리 질문드립니다. [2] 생각찾기 2015.05.01 3811





XE Login