2013-12-08 3 views
1

start_dateend_date 타임 스탬프가있는 테이블이 있는데이 행에는 반경 계산 테이블의 데이터가 들어 있습니다.MySQL 동시 행 선택

일단 사용자가 로그인하면 잠시 후에 start_date 타임 스탬프가있는 행이 삽입되고 사용자가 로그 오프하면 end_date에 UPDATE가 채워집니다. 여기

행의 커플 : 동시 사용자들의 최대 수가 2 인 경우 2013년 11월 19일이 너무

ID    | start_date   | end_date 
22    2013-11-19 12:00:22  2013-11-20 14:20:22 (*) 
23    2013-11-19 12:02:22  2013-11-20 15:20:22 (*) 
23    2013-11-19 17:02:22  2013-11-20 20:20:22 
24    2013-11-20 12:06:22  2013-11-20 15:20:22 * 
25    2013-11-20 12:40:22  2013-11-20 15:23:22 * 
26    2013-11-20 12:50:22  2013-11-20 17:23:22 * 
27    2013-11-20 16:56:22  2013-11-20 17:29:22 
28    2013-11-20 17:58:22  2013-11-20 20:24:22 

((*)로 표시된) (시작 시간과 종료 시간 사이에 그들의 중첩), 2013-11-20 3 (* 표시)

SQL 쿼리를 작성하여 하루 중 가장 많은 동시 사용자 수를 얻으려고합니다 (시작 및 종료 날짜 기준). 짧은 결과는 2013-08-12에 가장 많은 온라인이 동시에 xx 번호가 될 것입니다.

행별로 행을 분석하여 PHP에서이 작업을 수행 할 수 있지만 SQL 쿼리로 유지하고 싶습니다.

+0

그룹'로 봐 시도 BY'와'DAY (date)'를 사용하여 날짜의 일 부분을 추출하고,'COUNT (*) '를 사용하여 발생 수를 표시 할 수 있습니다. 테이블 구조를 알지 못해도 (나를 위해) 전체 쿼리를 제공 할 수는 없습니다. – skiwi

+0

StackOverflow 에서이 게시물을 확인하십시오 : http://stackoverflow.com/questions/1764881/mysql-getting-data-for-histogram-plot 몇 가지 아이디어가 유용 할 수도 있습니다. – GregD

답변

2

select d, count(*) as user_count 
from 
(
    select start_date as d from your_table 
    union all 
    select end_date as d from your_table 
) x 
group by d 
order by user_count desc 
0

당신은 각각의 데이터 포인트에 동시 사용자의 수를 계산 당신이 (시작일/종료일) 및 그 중 최대를 계산할 수 :

select max(cnt) 
from (
    select q.t, count(*) as 'cnt' 
    from (
    select start_date as 't' 
    from log 
    where start_date between YOUR_START_DATE and YOUR_END_DATE 
    union 
    select end_date 
    from log 
    where end_date between YOUR_START_DATE and YOUR_END_DATE 
) as q 
    join log l on q.t between l.start_date and l.end_date 
    group by q.t 
) a