2011-10-07 3 views
0

검색 할 데이터가 있지만 특정 초 단위로 그룹화하려고합니다. 예를 들어 내 표는 다음과 같다 경우 :기간별 결과 그룹화

| id | user | pass | created | 

created 열 INT이며, 타임 스탬프 (1970 초 수)를 보유하고 있습니다.

나는 지난 달과 현재 날짜 사이에 생성 된 사용자 수를보고 싶지만 7*24*3600 (일주일)이라고 말하면 그룹화 된 사용자를 표시하고 싶습니다. 따라서 범위가 1,000 명의 신규 사용자가있는 경우 매주 등록 된 사용자 수 (첫 번째 주 100 회, 두 번째 450 회, 세 번째 50 회, 세 번째 회 50 회, 네 번째 주 400 회 -이 같은 항목 표시)를 표시하십시오.

결과를 그룹화하여 시도한 결과는 created/7*24*3600이지만 작동하지 않습니다.

내 쿼리는 어떻게 보이게해야합니까?

+0

죄송합니다. 언급하지 않았습니다. 그것은 INT이며 초 단위의 시간 소인을 보유합니다. –

답변

2

정수 나누기 div을 사용해야합니다. 그렇지 않으면 결과가 실제 값으로 바뀌고 주 중 하나도 같은 값으로 해석되지 않습니다.

SELECT 
    (created div (7*24*60*60)) as weeknumber 
    , count(*) as NewUserCount 
FROM users 
WHERE weeknumber > 1 
GROUP BY weeknumber 

참조 :

+0

고마워, 당신의 솔루션은 중요한 정보를 제공했다 :'div' –

+1

+1하지만'div'는 mysql 특정 구문이다. SQL2003 표준 함수'floor()'를 사용하여 동일한 결과를 얻을 수 있습니다. –

+0

@ XaviLópez, SQL 서버에서'/'연산자는 양쪽 피연산자가 정수인 경우에 진실 정수를 반환합니다. – Johan

1

여기 가능한 옵션을 시도 할 수 괜찮아 :

GROUP DAY BY

select count(*), DATE_FORMAT(created_at,"%Y-%m-%d") as created_day FROM widgets GROUP BY created_day 

그룹

select count(*), DATE_FORMAT(created_at,"%Y-%m") as created_month FROM widgets GROUP BY created_month 

GROUP 월별 연도 별

select count(*), DATE_FORMAT(created_at,"%Y") as created_year FROM widgets GROUP BY created_year 
2

당신은 그 부분의 정수 부분만을 유지해야합니다. floor() 기능으로 수행 할 수 있습니다.

select floor(created/604800) as week_no, count(*) from users group by floor(created/604800)을 사용해 보셨습니까?

"지난 달 만든 사용자 선택"부분이 분류되어 있다고 가정합니다.

+0

감사합니다. 내 문제는 내가'/'연산자 대신 div를 사용하는 것이 아니라 div를 사용한다는 것이다. 그러나 주요 아이디어는 귀하의 질문과 같습니다. –