【问题标题】:MySQL select data from last weekMySQL 选择上周的数据
【发布时间】:2014-01-09 08:08:32
【问题描述】:

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

到目前为止,这是我尝试过的:

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';

这是我的表格,表格日志:

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你能试试这个吗?你可以在这里测试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;
    

    工作原理

    后续查询返回星期几

    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 会查找周一到周五的日志。

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多