![](/img/trans.png)
[英](MySQL) Group by field and select both COUNT(field) and number of grouped rows
[英]Return the count of rows grouped by week MySQL
我試圖從數據按周分組的 MySQL 表中獲取行數。
到目前為止,我的查詢是:
"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 不是很有經驗。
任何幫助將不勝感激。
謝謝
這會將datetime
值轉換為一周中適當的星期一
select count(*) as tweets,
str_to_date(concat(yearweek(twitTimeExtracted), ' monday'), '%X%V %W') as `date`
from twitData
group by yearweek(twitTimeExtracted)
yearweek
返回周和年。 str_to_date
與字符串monday
str_to_date
為您提供星期一的datetime
值。
如果您的一周從Monday開始,請改用yearweek(twitTimeExtracted, 1)
。
始終獲取一周中的星期一的一種選擇是使用 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)
試試這個:
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
替代解決方案:
SELECT DATE(DATE_SUB(yourDate, INTERVAL WEEKDAY(yourDate) DAY));
例如:
SELECT DATE(DATE_SUB(DATE("2016-04-11"), INTERVAL WEEKDAY(DATE("2016-04-11")) DAY));
你也可以試試這個。
select
DATE_ADD(DATE(date), INTERVAL (7 - DAYOFWEEK(date)) DAY) as weekend,
count(tweets)
from scene.twitData
group by weekend;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.