2014-01-09 38 views
0

我想知道如何从上周选择所有数据?周一到周五之间,假设今天是星期一。我其实没有日期时间格式列。MySQL从上周选择数据

这里是我试过到目前为止:

SELECT * FROM logs 
WHERE WEEKDAY(CONCAT(year,'-',month,'-',day)) BETWEEN 0 AND 4 
AND YEARWEEK(date_added2) = YEARWEEK(CURRENT_DATE() - INTERVAL 7 DAY) AND deleted='n'; 

这是我的表,表日志:

enter image description here

回答

0

你能试试吗?你可以在这里测试http://www.sqlfiddle.com/#!2/3989b1/3/0

SELECT * 
FROM logs, 
    (SELECT (CURRENT_DATE() - INTERVAL (WEEKDAY(CURRENT_DATE()) + 1) % 7 DAY) AS sun_day) t1 
WHERE 
    logs.date_added2 BETWEEN t1.sun_day - INTERVAL 6 DAY 
     AND t1.sun_day - INTERVAL 2 DAY; 

它是如何工作

folling周

SELECT '2014-01-09' - INTERVAL (WEEKDAY('2014-01-09') + 1) % 7 DAY; 
+--------------------------------------------------------------+ 
| '2014-01-09' - INTERVAL (WEEKDAY('2014-01-09') + 1) % 7 DAY | 
+--------------------------------------------------------------+ 
| 2014-01-05             | 
+--------------------------------------------------------------+ 

SELECT '2014-01-10' - INTERVAL (WEEKDAY('2014-01-10') + 1) % 7 DAY; 
+--------------------------------------------------------------+ 
| '2014-01-10' - INTERVAL (WEEKDAY('2014-01-10') + 1) % 7 DAY | 
+--------------------------------------------------------------+ 
| 2014-01-05             | 
+--------------------------------------------------------------+ 

这样的查询返回周日,t1.sun_day - INTERVAL 6保持前一周的星期一,t1.sun_day - INTERVAL 2 DAY为前一周的周五。

mysql> SELECT @sunday := (CURRENT_DATE() - INTERVAL (WEEKDAY(CURRENT_DATE()) + 1) % 7 DAY) AS sunday; 
+------------+ 
| sunday  | 
+------------+ 
| 2014-01-05 | 
+------------+ 

mysql> SELECT @sunday - INTERVAL 6 DAY, @sunday - INTERVAL 2 DAY; 
+--------------------------+---------------------------+ 
| @sunday - INTERVAL 6 DAY | @sunday - INTERVAL 2 DAY | 
+--------------------------+---------------------------+ 
| 2013-12-30    | 2014-01-03    | 
+--------------------------+---------------------------+ 

因此,logs.date_added2 BETWEEN t1.sun_day - INTERVAL 6 DAY AND t1.sun_day - INTERVAL 2 DAY会从星期一到星期五发现日志。