分离SQL语句

时间:2018-10-05 18:11:46

标签: mysql sql

对于开始使用更高级的SQL查询的人来说,有什么好的解释语句和理解其背后逻辑的技巧?

例如,在提取最近7天的数据以进行可视化时:

case when `date` >= SUBDATE(`max_date`, interval 7 day) and
          `date` <= `max_date` 
     then 'Yes' 
     else 'No' 
end

为什么它需要“和date”?大多数在线示例都没有此内容。为了清楚地了解每个元素如何影响语句,如何将其分解?

谢谢!

1 个答案:

答案 0 :(得分:0)

这个评论太长了。

您的代码正在检查数据中最大值的7天内的日期。因为您知道最大日期,所以它们是等效的:

`date` >= SUBDATE(`max_date`, interval 7 day) and `date` <= `max_date` 
`date` >= SUBDATE(`max_date`, interval 7 day) 

第二个条件始终为真。当然,我假设max_datedate的最大值。如果没有,那么您需要两个比较。

这不同于最近7天,大多数人会相对于当前日期进行解释。那会更像:

case when `date` >= SUBDATE(curdate(), interval 7 day) and
          `date` <= curdate()
     then 'Yes' 
     else 'No' 
end

(注意:可能需要一个星期interval 6 day,但是我忽略了逻辑上的边界条件。)如果date代表发生的事情,则它们必然存在于过去,因此不需要第二次比较。