MySQL Query从上周选择数据?

cod*_*rex 90 mysql sql database datetime

嗨,我有一个带有日期字段和其他信息的表.我想选择过去一周的所有参赛作品(从周日开始的一周).

表值:

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
Run Code Online (Sandbox Code Playgroud)

我想从上周选择所有ID,预期输出为5,6,8. (id 2不在上周,id 15在当前周.)

如何编写和SQL查询相同.

mr_*_*air 128

select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();
Run Code Online (Sandbox Code Playgroud)

  • 如果您在 '2011-05-22' 上运行它,这并不能解决 OP 问题,您会得到“id 15”... (2认同)
  • 这是最好的答案. (2认同)

pio*_*trm 115

SELECT id FROM tbl
WHERE date >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY
AND date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
Run Code Online (Sandbox Code Playgroud)

  • 它返回最后7天而不是上周 (6认同)
  • @Graph是的,上面的SQL脚本将是这样的:SELECT id FROM tbl WHERE DATE> DATE_SUB(DATE(NOW()),INTERVAL DAYOFWEEK(NOW())+ 6 DAY)AND DATE <= DATE_SUB(DATE(NOW(NOW) )),INTERVAL DAYOFWEEK(现在()) - 1天) (4认同)

小智 19

SELECT id FROM table1
WHERE YEARWEEK(date) = YEARWEEK(NOW() - INTERVAL 1 WEEK)
Run Code Online (Sandbox Code Playgroud)

我专门使用YEARWEEK功能回到之前的整个日历周(而不是今天前7天).YEARWEEK还允许第二个参数设置一周的开始或确定如何处理一年的第一周/最后一周.YEARWEEK允许您在单个变量中保留返回/前进的周数,并且不包括来自之前/未来年份的相同周数,并且它远远短于此处的大多数其他答案.

  • 据我所知,这是实际上可以正确回答OP问题的唯一答案。问题是如何从“前一周”获得记录。这里的许多答案实际上是不正确的。 (2认同)

Ana*_*nam 13

简化形式:

上周数据:

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 1 AND YEAR( date) = YEAR( current_date );
Run Code Online (Sandbox Code Playgroud)

2周前数据:

SELECT id FROM tbl


WHERE 
WEEK (date) = WEEK( current_date ) - 2 AND YEAR( date) = YEAR( current_date );
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

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

  • 我只是对YEAR(日期)= YEAR(current_date)感到困惑.怎么选择前一年? (3认同)

Sim*_*rek 10

如果您要检索过去 7 天内的记录,可以使用以下代码片段:

SELECT date FROM table_name WHERE DATE(date) >= CURDATE() - INTERVAL 7 DAY;
Run Code Online (Sandbox Code Playgroud)


Ibu*_*Ibu 7

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

$date = date('Y-m-d H:i:s',time()-(7*86400)); // 7 days ago

$sql = "SELECT * FROM table WHERE date <='$date' ";
Run Code Online (Sandbox Code Playgroud)

现在这将给出一周前的日期


小智 6

也许最简单的方法是:

SELECT id
FROM table
WHERE date >= current_date - 7
Run Code Online (Sandbox Code Playgroud)

为期8天(即周一至周一)


MS *_*nds 6

请人们......像OP所问的“上周”以及我正在寻找的地方(但没有找到令人满意的答案)是最后一周。

如果今天是星期二,那么LAST WEEK是从 Monday A WEEK A GO到 Sunday A WEEK A GO

所以:

WHERE
    WEEK(yourdate) = WEEK(NOW()) - 1
Run Code Online (Sandbox Code Playgroud)

或 ISO 周:

WHERE
    WEEK(yourdate, 3) = WEEK(NOW(), 3) - 1
Run Code Online (Sandbox Code Playgroud)


M. *_*put 5

这是一种在 MySQL 中获取上周、月和年记录的方法。

上个星期

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE WEEK(InsertTime) = WEEK(NOW()) - 1;
Run Code Online (Sandbox Code Playgroud)

上个月

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE MONTH(InsertTime) = MONTH(NOW()) - 1;
Run Code Online (Sandbox Code Playgroud)

去年

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE YEAR(InsertTime) = YEAR(NOW()) - 1;
Run Code Online (Sandbox Code Playgroud)