MySQL Previous week


MySQL Previous week

我想检索上周和 15 周前的数据。

注意:仅在 15 周前的同一工作日,并非所有数据介于两者之间。例如,我想要 15 周前的每个星期四的数据。

这是我的MySQL表的简化,具有所需的结果。

Station | Type |     Date    |   Value
5          2     2012-08-02     3
5          2     2012-07-26     5
5          2     2012-07-19     1

我今天的做法是通过PHP:

$dates = "(";
for($j=1; $j<=15; $j++) { // 15 weeks back, same weekday
$dates .= "'" . date("Y-m-d", strtotime("-{$j} week")) . "', ";
 }

然后我使用"从blabla date$dates的地方选择 * "将其附加到 MySQL 查询中,但这不是一个好的解决方案。那么如何使用纯 MYSQL 选择距今 15 周的日期呢?

select col1, col2 from blabla where date>=DATE_SUB(now(),INTERVAL 15 week)

编辑我假设您只需要与日期相同的一周中同一天的数据 - 试试这个:

select
    a.col1,
    a.col2
from
    blabla a
        join blabla b
            on weekday(a.date)=weekday(b.date)
where
    a.date>=date_sub(now(), interval 15 week)
    and b.date>=date_sub(now(), interval 15 week)

尝试:

select col1, col2 
from blabla 
where date BETWEEN DATE_SUB(now(),INTERVAL 1 week) 
AND DATE_SUB(now(),INTERVAL 15 week) 
AND DAYOFWEEK(`date`) = 5

这将为您提供上周和 14 周前的数据。

这个 (DATEPART(date,@dtDate) = 5) 将只返回星期四。

在 mysql 中使用日期字段。 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

SELECT * 
FROM foo 
WHERE `date` BETWEEN DATE_SUB(NOW(),INTERVAL 1 week) AND DATE_SUB(NOW(),INTERVAL 15 week)
AND DAYOFWEEK(`date`) = DAYOFWEEK(NOW());

更多信息在这里。