簡體   English   中英

MySQL查詢從上周選擇數據?

[英]MySQL Query to select data from last week?

嗨,我有一個帶有日期字段和其他一些信息的表格。 我想選擇過去一周的所有條目(從星期日開始的一周)。

表值:

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 Query一樣。

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' ";

現在這將給出一周前的日期

請人們......像OP所問的“上周”以及我正在尋找的地方(但沒有找到令人滿意的答案)是最后一周。

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

所以:

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;

上個月

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

去年

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

可能最簡單的方法是:

SELECT id
FROM table
WHERE date >= current_date - 7

8天(即周一-周一)

它可以在一行中:

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

您需要在中間件(php、python 等)中計算相對於今天的哪一天是星期日*

然后,

select id
from table
where date >= "$sunday-date" + interval 7 DAY
  • 也可能是在 MySQL 中獲取相對於今天的星期日日期的一種方法; 如果執行起來不太昂貴,那可以說是更清潔的解決方案

一種簡單的方法可以是這種方法,這是我的代碼中的一個真實示例,並且可以完美運行:

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 )

更多示例如上個月、去年、過去 15 天、過去 3 個月

獲取上周記錄

使用下面的 MySQL 查詢從 mysql 數據庫表中獲取上周的記錄。

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

如果您要檢索過去 7 天內的記錄,可以使用以下代碼段:

SELECT date FROM table_name WHERE DATE(date) >= CURDATE() - INTERVAL 7 DAY;
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()) ;

你也可以用它esay方式

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

嘗試這個:

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是數據庫字段名稱,這個名稱可能因人而異。

如果您已經知道日期,那么您可以簡單地使用 between,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM