2013-03-22 21 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など)から始まり、今週まで実行された各週のデータ。

Iはまた、クエリのorignalの修正バージョンを試みた:これは最初のクエリーと同様の結果を返す

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についてよく経験していないことは分かりません。

本当にありがとうございます。いつもの週の月曜日を得るために

+1

だから、何週番号が月曜日の1月7日でしたか? 1週間の月曜日は何週でしたか?多分試してみてください: "週ごとのグループ(twitTimeExtracted、1)" – Strawberry

+0

_how_これは間違っていますか?あなたは魔法の曜日開始日が現れると期待していますか? (私は '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'は年*と*週の両方を提供するので、あなたがあなたのデータセットに複数の年を持っていてもうまくいくはずです。更新された回答をご覧ください。 –

0

一つの選択肢はadddateを使用することです

ありがとう:

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行の結果を生成します。週ごとの結果は1つの結果行数に集約されません。 – 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)); 
関連する問題