8

我正在尝试从数据按周分组的 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 不是很有经验。

任何帮助将不胜感激。

谢谢

4

5 回答 5

19

这会将datetime值转换为一周中适当的星期一

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

yearweek返回周和年。与字符串一起mondaystr_to_date为您提供星期一的datetime值。

如果您的一周从Monday开始,请yearweek(twitTimeExtracted, 1)改用。

于 2013-03-22T14:45:25.333 回答
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 小提琴演示

于 2013-03-22T14:10:57.413 回答
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
于 2013-03-22T14:17:26.727 回答
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));
于 2016-04-10T12:18:31.683 回答
0

你也可以试试这个。

select 
DATE_ADD(DATE(date), INTERVAL (7 - DAYOFWEEK(date)) DAY) as weekend,
count(tweets)
from scene.twitData 
  group by weekend;
于 2020-06-19T03:38:31.103 回答