MySQL 查询以选择上周的数据



嗨,我有一个带有日期字段和其他一些信息的表格。我想选择过去一周的所有条目(一周从星期日开始)。

表值:

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查询相同。

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

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

简化形式:

上周数据:

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('Y-m-d H:i:s',time()-(7*86400)); // 7 days ago
$sql = "SELECT * FROM table WHERE date <='$date' ";

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

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

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

可能最简单的方法是:

SELECT id
FROM table
WHERE date >= current_date - 7

8天(即周一至周一)

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

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

所以:

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

或对于 ISO 周:

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

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

上个星期

SELECT UserName, InsertTime 
FROM tblaccounts
WHERE WEEK(InsertTime) = WEEK(NOW()) - 1
AND MONTH(InsertTime) = MONTH(NOW())
AND YEAR(InsertTime) = YEAR(NOW()) 

上个月

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

去年

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

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

然后

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • 也可能是MySQL中获取周日相对于今天的日期的一种方式;如果不是太昂贵,这可以说是更干净的解决方案。

它可以在一行中:

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

一个简单的方法可以是这个,这是我代码中的一个真实示例,并且运行良好:

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

上述查询将不起作用。在 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中多减去一天即可。 如果我今天选择这两个变量得到

@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/* 上周日 */

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 trunc(DATE) <= (trunc (sysdate) -5)  AND trunc(DATE) >= (trunc (sysdate) -12)

-5 是从系统日期向后 5 天,, -12 是本例中从系统日期向后 12 天 星期三/或 sednesa 到星期三无法召回。

我的方式:

SELECT id
FROM tablename
WHERE date BETWEEN DATE_ADD(NOW(), INTERVAL -1 WEEK) AND NOW()

试试这个:

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 date(createdtime) <= date(curdate())-7

在上面的代码中,createdtime是数据库字段名称,因为个人这个名称可能会有所不同。

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

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

相关内容

  • 没有找到相关文章

最新更新