0

我想检索上周和 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然后我使用“SELECT * FROM WHERE IN $dates”将其附加到 MySQL 查询中date,但这不是一个好的解决方案。那么如何使用纯 MYSQL 选择 15 周前的日期?

4

4 回答 4

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

于 2012-08-09T08:37:36.933 回答
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)
于 2012-08-09T08:30:29.433 回答
0

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

于 2012-08-09T08:31:01.740 回答
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());

更多信息在这里

于 2012-08-09T08:58:13.333 回答