2013-03-22 3 views
7

데이터가 WEEK로 그룹화 된 MySQL 테이블에서 행 수를 얻으려고합니다.주별로 그룹화 된 행 수를 반환합니다. MySQL

지금까지 내가 가지고있는 쿼리는 다음과 같습니다 당신이 볼 수 있듯이

enter image description here

, 몇 주 동안은 정확하지 않습니다, 내가 기대 해요 :

"SELECT count(*) as tweets, twitTimeExtracted as date 
    FROM scene.twitData 
    group by week(twitTimeExtracted)" 

이 쿼리는 아래의 데이터를 반환 1 월 7 일 월요일 (7,14,21,28,4,11 등 ...)부터 시작하여 이번 주까지 진행되는 매주 데이터

SELECT count(*) as tweets, twitTimeExtracted as date 
FROM scene.twitData 
WHERE date(twitTimeExtracted) 
    BETWEEN '2013-01-07' and '2013-03-11' 
group by week(twitTimeExtracted) 

이 첫 번째 쿼리와 유사한 결과를 반환 :

나는 또한 시킴으로 빨리 쿼리의 수정 된 버전을 시도했다.

몇 줄의 데이터에서 DATETIME : twitTimeExtracted 열에 저장된 일부 데이터와 불일치가있을 수 있습니까? 나는 MySQL에 익숙하지 않다는 것을 정말로 모른다.

도움이 될만한 의견이 있습니다.

감사

주의가 ADDDATE 사용하는 것입니다의 항상 월요일을 얻을
+1

, 월요일 7 월 뭔지 주 수? 어떤 주 번호가 1 월 1 일 월요일 이었습니까? 어쩌면 시도 : "주별 그룹 (twitTimeExtracted, 1)" – Strawberry

+0

_how_이 잘못된 것입니까? 마법의 시작일이 나타나기를 기대하십니까? (BTW, 나도 YEAR()에 그룹화해라.) – Wrikken

답변

14

이것은 datetime 변환을 적절한 주 월요일에 값

select count(*) as tweets, 
     str_to_date(concat(yearweek(twitTimeExtracted), ' monday'), '%X%V %W') as `date` 
from twitData 
group by yearweek(twitTimeExtracted) 

yearweek 주와 년 모두를 반환합니다. 문자열 monday과 함께 str_to_date은 월요일의 datetime 값을 제공합니다.

주일이 Monday으로 시작하는 경우 yearweek(twitTimeExtracted, 1)을 대신 사용하십시오.

+0

이 작업을 완료했습니다! 도와 주신 모든 분들께 감사드립니다! – user1814487

+0

다른 날짜의 날짜 일 경우 실패하지 않습니까? – NateS

+1

@NateS 나는 그렇게 생각하지 않는다. 'yearweek'는 year *와 * week를 모두 제공하므로 데이터 세트에 여러 해가 있더라도 작동해야합니다. 업데이트 된 답변을 참조하십시오. –

0

하나의 옵션 :

SELECT count(*) as tweets, adddate(twitTimeExtracted, INTERVAL 2-DAYOFWEEK(twitTimeExtracted) DAY) 
FROM twitData 
WHERE date(twitTimeExtracted) 
    BETWEEN '2013-01-07' and '2013-03-11' 
GROUP BY adddate(twitTimeExtracted, INTERVAL 2-DAYOFWEEK(twitTimeExtracted) DAY) 

SQL Fiddle Demo

+0

덕분에이 쿼리는 ~ 19,000 개의 결과 행을 생성한다. 주당 결과는 하나의 결과 행 수로 압축되지 않습니다. – user1814487

+0

@ user1814487 - 왜 SQL Fiddle을 보았습니까? 예상대로 아니야? – sgeddes

+0

SQL 바이올린은 예상대로 작동합니다. 서버에서 쿼리를 실행할 때 매주의 모든 결과가 해당 월의 첫 번째 날로 반환되고 시간과 1이 카운트 (*) 열 : 예 : http://i.imgur.com/kMMIAel.png – user1814487

0

이 시도 :

SELECT count(*) as tweets, 
    date_add('7 Jan 2012', day, datediff('7 Jan 2012', twitTimeExtracted)) % 7 
FROM scene.twitData 
group by date_add('7 Jan 2012', day, datediff('7 Jan 2012', twitTimeExtracted)) % 7 
+0

감사하지만이 오류는 다음과 같습니다. "SQL 구문에 오류가 있습니다. 'day, datediff ('7 Jan 2012 ', twitTimeExtracted) 근처에서 사용할 올바른 구문에 대한 MySQL 서버 버전에 해당하는 설명서 Mod 7 FROM scene.twitData 'at line 2 " – user1814487

0

대체 솔루션 :

SELECT DATE(DATE_SUB(yourDate, INTERVAL WEEKDAY(yourDate) DAY)); 

예 : 그래서

SELECT DATE(DATE_SUB(DATE("2016-04-11"), INTERVAL WEEKDAY(DATE("2016-04-11")) DAY)); 
관련 문제