MySQL Query从上周选择数据?

时间:2011-05-22 18:42:01

标签: 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

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

如何编写和查询SQL查询。

21 个答案:

答案 0 :(得分:119)

select id from tbname
where date between date_sub(now(),INTERVAL 1 WEEK) and now();

答案 1 :(得分:113)

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

答案 2 :(得分:16)

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

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

答案 3 :(得分:12)

简化形式:

上周数据:

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

答案 4 :(得分:7)

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

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

$sql = "SELECT * FROM table WHERE date <='$date' ";

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

答案 5 :(得分:3)

可能最简单的方法是:

SELECT id
FROM table
WHERE date >= current_date - 7

持续8天(即周一至周一)

答案 6 :(得分:2)

它可以在一行中:

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

答案 7 :(得分:2)

请人们......'上周'就像OP问的那样,我在寻找的地方(但没有找到令人满意的答案)是最后一周。

如果今天是星期二,那么上周是星期一周末到星期日 A WEEK AGO

所以:

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

或ISO周:

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

答案 8 :(得分:2)

一个简单的方法就是这个,这是我的代码中的一个真实例子并且完美地运作:

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

答案 9 :(得分:2)

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

然后,

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

答案 10 :(得分:1)

以上查询无效。 在CAST子句之后,如果我们不能cast列值,那么它将无效。您应该SELECT..... WHERE CAST( yourDateColumn AS DATE ) > DATEADD( DAY, -7, CAST( GETDATE() AS DATE ) 列值。

e.g:

Psy Shell v0.8.3 (PHP 7.1.0 — cli) by Justin Hileman
>>> serialize(function(){});
Exception with message 'Serialization of 'Closure' is not allowed'

答案 11 :(得分:1)

这是一种获取MySQL上周,月份和年份记录的方法。

上周

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE WEEK(InsertTime) = WEEK(NOW()) - 1;

过去一个月

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE MONTH(InsertTime) = MONTH(NOW()) - 1;

去年

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE YEAR(InsertTime) = YEAR(NOW()) - 1;

答案 12 :(得分:1)

如果您希望在最近7天内检索记录,可以使用以下代码段:

SELECT date FROM table_name WHERE DATE(date) >= CURDATE() - INTERVAL 7 DAY;

答案 13 :(得分:0)

WHERE yourDateColumn > DATEADD(DAY, -7, GETDATE()) ;

答案 14 :(得分:0)

你也可以使用esay方式

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

答案 15 :(得分:0)

我在星期日从星期开始使用它:

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

答案 16 :(得分:0)

SELECT id  FROM tb1
WHERE 
YEARWEEK (date) = YEARWEEK( current_date -interval 1 week ) 

答案 17 :(得分:0)

For more example Like last month, last year, last 15 days, last 3 months

获取上一个星期记录

使用下面的MySQL查询从mysql数据库表中获取最近一周的记录。

SELECT name, created_at 
FROM employees
WHERE
YEARWEEK(`created_at`, 1) = YEARWEEK( CURDATE() - INTERVAL 1 WEEK, 1)

答案 18 :(得分:-1)

试试这个:

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

答案 19 :(得分:-1)

你可以试试这个。它对我有用:

where date(createdtime) <= date(curdate())-7

在上面的代码中,createdtime 是数据库字段名称,这个名称因人而异。

答案 20 :(得分:-5)

如果您已经知道日期,那么您可以简单地使用它们,如下所示:

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