MySQL上周

时间:2012-08-09 08:28:00

标签: php mysql

我想从上周和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")) . "', ";
 }

然后我使用“SELECT * FROM blabla WHERE date IN $ dates”将其附加到MySQL查询,但这不是一个好的解决方案。那么我如何使用纯MYSQL选择15周后的日期呢?

4 个答案:

答案 0 :(得分:1)

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)

答案 1 :(得分:1)

尝试:

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(日期,@ dtDate)= 5)将只返回星期四。

答案 2 :(得分:0)

答案 3 :(得分:0)

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

更多信息here