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
운영게시판
최근게시물
MySQL Q&A 30124 게시물 읽기
No. 30124
통계관련 질의문 부탁 드립니다.
작성자
통계좌절
작성일
2011-11-07 14:32
조회수
9,939

아래와 같은 테일블을 생성 하였습니다.

CREATE TABLE `login_log` (
  `idx` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `user_regist_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `insert_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `update_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `delete_date` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`idx`),
  KEY `login_log_mix1` (`user_regist_date`,`insert_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

위 테이블 데이터에서 수집해야 할 데이터는

1. 30일간  `user_id`의 유저가 1일단위로 몇일간 연속으로 로그인을 했는지의 카운트

2.  특정 범위의 기간 내 포함 되는 계정 생성일(user_regist_date) 카운트, 기간 내 일 단위 로그인 횟수

예) 조건 : 2011.10.01 ~ 2011.11.30

     출력

     년/월/일           계정생성 수    1일후 접속횟수      2일후 접속횟수     3일후 접속횟수.....

     2011/11/30      200                  120                       150                         100

     2011/11/29      100                  50                         10                           0

 

계정을 생성한 유저가 1일 단위로 몇명이 접속을 했는지 통계를 알고 싶습니다..

예를들어 2011/11/30일 200면이 계정을 생성 했으면 200면의 유저중 2011/11/30일에서 하루 지난날 몇명의 유저가 로그인을 했는지..

2일이 지난날,, 3일이 지난날,, 4일이 지난날,,, 60일이 지난날,,,

 

머리 싸매고 쿼리문을 만들어 보고 있지만..

쉽지가 않네요..

쿼리 만으로 위 통계를 내는게 과연 가능할지도 싶고..

 

여러 고수님의 도움 부탁 드립니다..

감사합니다

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

n일간 잔존률을 구하시는군요. 잔존률 구하는 룰에 따르자면 접속횟수가 아니라 접속계정수로 뽑으시는게 맞습니다. 그렇지 않다면 잔존률이 100%를 넘어가기도 하겠죠?

 

일단, login_log가 사용자당 1개만 유지하는 값이라면 잔존률은 뽑을 수 없습니다. 사용자가 로그인할 때마다, 또는 한 사용자에 대해 일일 1개씩만 남기는 경우에만 구할 수 있습니다. 이와 같이 가정한다면,

쿼리) 2011-10-01에 계정을 생성한 사용자들 중 1일후 접속계정수 뽑기

SELECT COUNT(DISTINCT user_id) FROM login_log WHERE user_regist_date BETWEEN '2011-10-01 00:00:00' AND '2011-10-01 23:59:59' AND update_date BETWEEN DATE_ADD('2011-10-01 00:00:00', INTERVAL +1 day) AND DATE_ADD('2011-10-01 23:59:59', INTERVAL +1 day)

 

user_regist_date나 update_date에 DATE/TIME 함수를 이용해 값을 변환하면 인덱스를 탈 수 없으므로, 위와 같이 비교하고자 하는 값을 변환해서 주는 것을 권장해드립니다. 애초에 DATE/TIME 컬럼을 분해 하는 것도 한 가지 방법입니다. ( 장단점이 있습니다 )

이와 같은 쿼리를 m일 x n일에 대해 수행하면 원하는 2차원 매트릭스를 생성하실 수 있게 됩니다.

 

 

덧) login_log를 사용자당 1개만 유지하는 경우라면, 매일 매일 통계를 돌리면 뽑을 수는 있습니다만, 이미 시간이 지나버린 경우라면 불가능합니다.

박현우(lqez)님이 2011-11-08 02:54에 작성한 댓글입니다.
이 댓글은 2011-11-08 02:56에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
30140mysql 서버가 euckr로 설정이 되어 있는데 '한글과 일어'가 동시에 입력과 웹으로 출력이 되요.왜죠? [1]
허허로
2011-11-13
7814
301324개의 테이블 안에 원하는 값 조회..!! [1]
안인철
2011-11-10
8371
30131MyISAM 데이터 파일로 DB 복원(재구축) 가능 한가요? [2]
윤성진
2011-11-09
7622
30124통계관련 질의문 부탁 드립니다. [1]
통계좌절
2011-11-07
9939
30111자동증가 값 구하기 [6]
강삼수
2011-11-02
10995
30108[쿼리]어떤 방법이 좋을까요? [1]
전제영
2011-11-02
9037
30107mysql workbench 백업받기 [2]
김양훈
2011-11-01
12558
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다