首页 > 解决方案 > 拆分 SQL 语句

问题描述

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

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

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

为什么需要“和date”?大多数在线示例都没有这个......并且如何将其分解以清楚地了解每个元素如何对陈述做出贡献?

谢谢!

标签: mysqlsql

解决方案


评论太长了。

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

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

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

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

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

(注意:一周,你可能想要interval 6 day,但我忽略了逻辑上的边界条件。)如果dates 代表已经发生的事情,它们必然是过去的,所以第二次比较是没有必要的。


推荐阅读