MySQL查询select上周的数据?

嗨,我有一个date字段和其他一些信息表。 我想select过去一周的所有参赛作品,(从周日开始的一周)。

表值:

id date 2 2011-05-14 09:17:25 5 2011-05-16 09:17:25 6 2011-05-17 09:17:25 8 2011-05-20 09:17:25 15 2011-05-22 09:17:25 

我想从上周select所有的ID,预期的输出是5,6,8。 (ID 2不在上周,ID 15在本周。)

如何编写和SQL查询相同。

 SELECT id FROM tbl WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY 
 select id from tbname where date between date_sub(now(),INTERVAL 1 WEEK) and now(); 

简化forms:

上周数据:

 SELECT id FROM tbl WHERE WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date ); 

2周前数据:

 SELECT id FROM tbl WHERE WEEK (date) = WEEK( current_date ) - 2 AND YEAR( date) = YEAR( current_date ); 

SQL小提琴

http://sqlfiddle.com/#!8/6fa6e/2

您可以在php中进行计算,然后将其添加到您的查询中:

 $date = date('Ymd H:i:s',time()-(7*86400)); // 7 days ago $sql = "SELECT * FROM table WHERE date <='$date' "; 

现在这会给一个星期前的date

 SELECT id FROM table1 WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK) 

我特别使用YEARWEEKfunction回到之前的整个日历周(而不是今天的前7天)。 YEARWEEK还允许第二个参数设置一周的开始,或者确定如何处理年度的第一个/最后一个星期。 YEARWEEK可以让您在单个variables中保留周/周的数量,并且不会包含与过去/未来年份相同的周数,而且比这里的其他大部分答案要短得多。

你需要计算哪一天相对于今天是星期天在你的中间件(php,python等)*

然后,

 select id from table where date >= "$sunday-date" + interval 7 DAY 
  • 可能是一种在MySQL中获取相对于今天的星期日的方法; 如果不是太昂贵的话,这可以说是更清洁的解决scheme

可能最简单的方法是:

 SELECT id FROM table WHERE date >= current_date - 7 

8天(即星期一至星期一)

它可以在一行中:

 SELECT * FROM table WHERE Date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW() 

上面的查询将不起作用。 在where子句之后,如果我们不能CAST列值,那么它将不起作用。 您应该cast列值。

例如:

 SELECT..... WHERE CAST( yourDateColumn AS DATE ) > DATEADD( DAY, -7, CAST( GETDATE() AS DATE ) 
 SELECT id FROM tb1 WHERE YEARWEEK (date) = YEARWEEK( current_date -interval 1 week ) 

我经常做一个快速的“上周”检查,以下往往适合我,包括今天。

 DECLARE @StartDate DATETIME DECLARE @EndDate DATETIME SET @StartDate = Getdate() - 7 /* Seven Days Earlier */ SET @EndDate = Getdate() /* Now */ SELECT id FROM mytable WHERE date BETWEEN @StartDate AND @Enddate 

如果你想这不包括今天只是从@EndDate减去额外的一天。 如果我今天select这两个variables得到

@StartDate 2015-11-16 16:34:05.347 / *上周一* /

@EndDate 2015-11-23 16:34:05.347 / *本周一* /

如果我想星期天到星期天,我会有以下几点。

 SET @StartDate = Getdate() - 8 /* Eight Days Earlier */ SET @EndDate = Getdate() - 1 /* Yesterday */ 

@StartDate 2015-11-15 16:34:05.347 / *上周日* /

@EndDate 2015-11-22 16:34:05.347 / *上个星期天* /

尝试这个:

 Declare @Daytype varchar(15), @StartDate datetime, @EndDate datetime set @Daytype = datename(dw, getdate()) if @Daytype= 'Monday' begin set @StartDate = getdate()-7 set @EndDate = getdate()-1 end else if @Daytype = 'Tuesday' begin set @StartDate = getdate()-8 set @EndDate = getdate()-2 end Else if @Daytype = 'Wednesday' begin set @StartDate = getdate()-9 set @EndDate = getdate()-3 end Else if @Daytype = 'Thursday' begin set @StartDate = getdate()-10 set @EndDate = getdate()-4 end Else if @Daytype = 'Friday' begin set @StartDate = getdate()-11 set @EndDate = getdate()-5 end Else if @Daytype = 'Saturday' begin set @StartDate = getdate()-12 set @EndDate = getdate()-6 end Else if @Daytype = 'Sunday' begin set @StartDate = getdate()-13 set @EndDate = getdate()-7 end select @StartDate,@EndDate 
 WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ; 

你也可以用它的方式

 SELECT * FROM inventory WHERE YEARWEEK(`modify`, 1) = YEARWEEK(CURDATE(), 1) 

我从星期一开始使用这个星期:

 SELECT id FROM tbl WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+5 DAY AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-2 DAY 

一个简单的方法可以是这个,这是我的代码的一个真实的例子,完美的作品:

 where("actions.created_at >= DATE_SUB(CURDATE(), INTERVAL 1 WEEK)") 

请人们……“上个星期”就像OP询问的,我在哪里寻找的(但没有发现满意的答案)是最后一周。

如果今天是星期二,那么上周是星期一星期一到星期天星期天。

所以:

 WHERE WEEK(yourdate) = WEEK(NOW()) - 1 

或ISO周:

 WHERE WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1 

如果你已经知道date,那么你可以简单地使用,如下所示:

 SELECT id FROM `Mytable` where MyDate BETWEEN "2011-05-15" AND "2011-05-21"