database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 4671 게시물 읽기
No. 4671
이런경우 SQL select문 어떻케 발행하나요 ?
작성자
이걸
작성일
2009-03-16 12:16
조회수
7,284

예) "고객접속테이블"이라고 가정해 보겠습니다.


일자         시간      고객번호         접속시간

20090301    09:00    111                 20

20090301    09:10     222                15

20090301    13:00     111                10

20090301    13:20     333                25

20090302    10:00    111                 20

20090302    11:10     222                15

20090302    12:00     444                10

20090302    13:20     333                25

20090302    13:25     555                25

20090302    14:00     444                10

20090303    10:00     666                 20

20090303    11:10     222                15

20090303    12:00     444                10

20090303   13:20     333                25

20090303    13:25     555                25


데이타가 위와 같고 다음과 같은 결과를 추출하기 위해서는 select를 어떻케 해야되는지 고수님들 부탁드립니다.


20090301일자에는 111,222,333 3명의 고객이므로  고객수 count가 3이 나왔으면 합니다.


20090302일자에는 444,555가 신규고객이므로 고객수는 2가 나와야 되고요,  즉 3/2일 기준으로 봤을대 기존고객은 count에 넣고 싶지 않은 것입니다. 그리고 444가 2회 접속을 했더라도 고객수 기준으로 1명이어야 되고요.


20090303일자에는 신규고객 666 한명이므로 1이 나와야 합니다.


즉, SQL한번 발행해서 매일자별로 신규고객 접속수를 알고싶습니다.

20090301     3

20090302     2

20090303     1

이런 결과가 나오게 하려면 select 문을 어떻케  발행해야 되는지요 ?


고수님들 다시한번 부탁드립니다.

이 글에 대한 댓글이 총 5건 있습니다.

접속테이블로만 쿼리를 작성하는것은 별로 효율적이지 않을것 같구요.
회원테이블의 가입일자를 기준으로 해서 신규 고객을 구하시는게 효율적이지 않을가 생각됩니다. 
회원 테이블에 만약 없다면 컬럼을 만드시구요.  기존 자료에 최초 접속일을 가입일자로 업데이트 하심
좋을듯. 
프로그램을 수정 하기 힘드시다면 디비에 트리거나 default처리하시는게  원칙일것 같네요...
고객수도 1~2백도 아닐거구 접속log도 1~2백건이 아닐건데 계속적인 누적 테이블을 가지고 조회해서 신규 회원을 가져오는건 비 효율적일것 같네여.....

원하시는게 최초 접속일이 신규고객 접속수로 보는것 같은데...
고객별 최소 접속일을 구하심

select 고객번호, min(일자) 일자
  from 접속테이블
group by 고객번호

지나가다가님이 2009-03-16 12:27에 작성한 댓글입니다.
이 댓글은 2009-03-16 12:30에 마지막으로 수정되었습니다. Edit

답변 고맙습니다.

바라는 것은 각 해당일자에 신규고객이 몇명이나 되는지 알고 싶은 것입니다.
이렇케 저렇케 생각좀 해보고 있는데 될듯 될듯 하면서 Simulation을 해보고 있습니다만, 잘 않되고 있습니다.   접속수하고 관련없이 그 이전에는 접속사실이 없고, 해당일자에 처음으로 접속한 고객수를 알고 싶은 것입니다.  다시한번 더 부탁좀 ,.......

이걸님이 2009-03-17 22:18에 작성한 댓글입니다. Edit

select 고객번호, min(일자) 일자

  from 접속테이블

group by 고객번호 


결국 고객별로 최초 접근일자가 신규 고객으로 보신다는 의미이기 때문에 이부분만 드리면 하실수 있으실것 같아서요.. 


slect res.일자, count(*)

  from (

           select 고객번호, min(일자) 일자

             from 접속테이블

            group by 고객번호  ) res

group by res.일자 

이렇게 하시면 되겠지만...


매번 전체를 full scan 해야 하는 문제가 발생합니다.


그래서 고객 테이블에 가입일자를 관리 하시면 고객 테이블을 가지고 신규 고객리스트를 쉽게 뻴수 있을것 같구요. 


결국 고객테이블이던 별도의 가입일자관리를 하시는데 효율적일것 같습니다.

가입시 하시던가, 최초접속시에 하시던가... 그건 어떤 기준을 정하느냐에 /다라 다르니까요..

지나가다가님이 2009-03-18 14:18에 작성한 댓글입니다. Edit
select res.ilja, count(*)  from (
           select ani, min(ilja) ilja from xgs_test group by ani  ) res
 group by res.ilja

효율면에서는 좋지않다는것도 동의 합니다. 

우선위답글에서 알려주신대로 위와같이 해봤습니다.

무슨 의미인지는 알겠습니다만, 아래와 같이 에러가 발생,....


Error Type:
Microsoft VBScript compilation (0x800A03FD)
Expected 'Case'
/sms/test_xgs_test.asp, line 22, column 7
select res.ilja, count(*) from (
------^

웹Case문까지 쓰라고 하네요.  자꾸 번거롭게 해드려 지송, (^_^)
다시한번만,......
이걸님이 2009-03-18 15:13에 작성한 댓글입니다. Edit

em에서는 이상이 없는데 혹 count(*) cnt  컬럼명을 지정해보세요...


그리고  아래의 내용을 참고하셔도 될듯...


http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10112&eid=zcxK2EhbKmH//D9fGI+qOdkXBbXqBZNF&qb=MHg4MDBBMDNGRA==&enc=utf8&pid=fNc2Zdoi5TCssv4HU7Csss--260104&sid=ScH2C67fwUkAAFsqHKM

지나가다가님이 2009-03-19 16:26에 작성한 댓글입니다.
이 댓글은 2009-03-19 16:31에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4674서로 다른 DB 서버의 동일 테이블 동기화 [1]
문의
2009-03-18
7717
4673Microsoft SQL Server Management Studio를 사용한 프로시저 수정방법 알려주세요 [3]
김윤호
2009-03-18
7361
4672대용량 작업시 - SQL 처리시의 속도 차이 [1]
굴뚝새
2009-03-16
7225
4671이런경우 SQL select문 어떻케 발행하나요 ? [5]
이걸
2009-03-16
7284
4670엔터프라이즈메니저에서 직접 datetime 컬럼에 getDate()를 입력할 수 있나요? [1]
최경준
2009-03-13
6962
4669고수님들... 질문있습니다. [1]
초짜
2009-03-13
5952
4668SQL서버2000 스텐다드 쓰고 있는데 2005 엔터프라이즈로 바꾸면 [3]
남성민
2009-03-12
6990
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다