2012-10-31 6 views
0

데이터베이스에서 지난 X 일에 업데이트 된 프로필을 찾고 날짜를 기준으로 그룹화하려고합니다.사용자 지정 쿼리 집계 및 날짜 집계

내 SQL 구조는 다음과 같습니다
아이디 (INT)
DATE_MODIFIED (날짜)이 같은 결과 뭔가 생산

: 이상적으로

+----+---------------+ 
| id | date_modified | 
+----+---------------+ 
| 86 | 2012-06-22 | 
| 87 | 2012-06-22 | 
| 88 | 2012-06-22 | 
| 89 | 2012-06-22 | 
| 63 | 2011-10-31 | 
| 72 | 2012-02-06 | 
| 60 | 2011-10-17 | 
| 71 | 2012-02-29 | 
| 69 | 2011-11-18 | 
| 76 | 2012-02-29 | 
| 70 | 2011-11-18 | 
| 75 | 2012-02-29 | 
| 73 | 2012-02-06 | 
| 74 | 2012-02-28 | 
| 77 | 2012-02-29 | 
| 80 | 2012-05-07 | 
| 82 | 2012-06-12 | 
| 83 | 2012-08-15 | 
| 84 | 2012-09-07 | 
| 85 | 2012-08-15 | 
+----+---------------+ 

을, 내가 일을 할 것입니다 쿼리를 실행하면 다음과 같은 결과가 생성됩니다.

+-------+----------+ 
| total | days_ago | 
+-------+----------+ 
| 4  | 1  | 
| 6  | 2  | 
| 8  | 3  | 
| 12 | 7  | 
| 3  | 30  | 
| 55 | 90  | 
| 28 | 180  | 
| 37 | 270  | 
| 42 | 360  | 
+----+-------------+ 

며칠 전에 date_modified를 nverting하고 위의 증분으로 그룹화합니다.

나는 이것이 선택 쿼리의 경우를 사용하여 가능할 것이라고 가정하고 있지만, 그것을 수행하는 방법에 대해 약간의 상실감이 있습니다.

답변

1

당신은 DATEDIFF MySQL의 기능을 사용해야합니다

DATEDIFF()은 expr1을 반환 - expr2이 다른 한 날로부터 일의 값으로 표현. expr1 및 expr2는 날짜 또는 날짜 및 시간 표현입니다. 값의 날짜 부분 만 계산에 사용됩니다. 귀하의 경우에는

, 단순히 당신은 테이블 이름에 필요한

SELECT COUNT(date_modified) as total, DATEDIFF(date_modified, NOW()) as days_ago FROM mytable GROUP BY date_modified; 
1

를 사용하여 해결할 것 - TBL, 당신이 지금 사용하는 쿼리를 삽입합니다. 특정 날짜의 경우 '(2012-06-10)'로 변경해야합니다.

쿼리 SQLFIDDLE example :

SELECT 
COUNT(id) total , 
DATEDIFF(now(),date_modified) days_ago 
FROM tbl 
GROUP BY date_modified 
ORDER BY days_ago 

결과 :

| TOTAL | DAYS_AGO | 
-------------------- 
|  1 |  54 | 
|  2 |  77 | 
|  4 |  131 | 
|  1 |  141 | 
|  1 |  177 | 
|  4 |  245 | 
|  1 |  246 | 
|  2 |  268 | 
|  2 |  348 | 
|  1 |  366 | 
|  1 |  380 |