mysql - 拆分 SQL 语句

标签 mysql sql

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

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

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

为什么需要“和date”?大多数在线示例都没有这个……如何分解它以便清楚地了解每个元素如何对语句做出贡献?

谢谢!

最佳答案

评论太长了。

您的代码正在检查数据中最大值 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 表示的是发生过的,必然是过去的,所以不需要第二次比较。

关于mysql - 拆分 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52671173/

相关文章:

php - 选择自定义结果

java - MySQL upsert (ON DUPLICATE KEY) 使用 JDBC 准备语句

php - PHP应用程序如何与ERP系统连接?

java - 由 : com. 引起 mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 'purchased1_.DTYPE' 中的未知列 'field list'

c# - ORA-00933: SQL 命令未正确结束

mysql - 在mysql数据库中随机获取特定实体的记录

MySQL - 强制新记录字段值大于先前记录字段值的约束

mysql - 查询从一个表和一个额外的列检索信息,这是另一个表的条件

mysql - 外键说 "NULL"什么时候应该是一个 int?

sql复杂组查询