提取上周数据(而不是过去7天)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提取上周数据(而不是过去7天)相关的知识,希望对你有一定的参考价值。

我有以下格式的数据。

id     - autoincrement
myDate - timestamp

我想要提取的是上周获得的ID。

注意到上周,我的意思是星期六 - 星期四而不是最近7天。考虑到当前日期(2013年2月12日),对我来说,上周将是2-Feb-2013 to 8-Feb-2013

我知道你会说,星期日从星期日开始,但是当我在阿拉伯国家工作时,星期五这里是关闭的,工作从星期六开始。

我知道在过去的7天里,它只是在代码之下

BETWEEN NOW() and DATE_SUB(NOW(), INTERVAL 7 DAY)

Data at sqlfiddle

答案

你可以尝试下面的方法来计算所需的结果:

SELECT *,WEEKOFYEAR(dt),DAYOFWEEK(dt),DAYNAME(dt), DAYOFWEEK(NOW()),WEEKOFYEAR(NOW()) 
FROM tab1 
WHERE 1
AND 
(
  (DAYOFWEEK(NOW()) = 1 OR DAYOFWEEK(NOW()) = 6 OR DAYOFWEEK(NOW()) = 7) 
  AND 
  WEEKOFYEAR(dt) = WEEKOFYEAR(NOW()) AND DAYOFWEEK(dt) < 6
)
OR 
(    
  (DAYOFWEEK(NOW()) = 2 OR DAYOFWEEK(NOW()) = 3 OR DAYOFWEEK(NOW()) = 4  
  OR DAYOFWEEK(NOW()) = 5)
  AND
  (
     (
      (WEEKOFYEAR(dt) = WEEKOFYEAR(NOW())-2 AND DAYOFWEEK(dt) >= 6)
      OR 
      (WEEKOFYEAR(dt) = WEEKOFYEAR(NOW())-1 AND DAYOFWEEK(dt) > 1 AND DAYOFWEEK(dt) < 6)
     )
  )
);

我知道这不是最聪明的方式,但基于此,您可能会得到更好的解决方案。

Demo at sqlfiddle

以上是关于提取上周数据(而不是过去7天)的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 选择过去 7 天(周)的数据,如果不存在,则为空/零

从过去 7 天的核心数据中提取实体

在当前行中,对代表上周(7 天)记录的行的数据求和

使用数据块计算过去 7 天每天的不同用户

在 BigQuery 中滚动 7 天

sql语句获取今天昨天近7天本周上周本月上月半年数据