我想检索上周和 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());
更多信息在这里。