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_date
是 的最大值date
。如果没有,那么你需要两个比较。
这与最近的 7 天不同,大多数人会相对于当前日期进行解释。那更像是:
case when `date` >= SUBDATE(curdate(), interval 7 day) and
`date` <= curdate()
then 'Yes'
else 'No'
end
(注意:一周,你可能想要interval 6 day
,但我忽略了逻辑上的边界条件。)如果date
s 代表已经发生的事情,它们必然是过去的,所以第二次比较是没有必要的。
推荐阅读
- javascript - TypeError:渲染组件时无法读取反应路由器中未定义的属性“映射”
- wpf - 在按钮单击时使用 WPF 中的验证规则进行验证
- google-bigquery - 将云存储中的文本文件 (.txt) 加载到大查询表中
- spring-boot - Spring Boot:异步方法不在单独的线程中运行
- mongodb-atlas-search - 创建 queryString $search 管道,它不仅在 MongoDB 地图集搜索中按单词边界返回结果
- ionic-framework - 如何在 android studio 中导入 ionic app v3 代码?如何运行它?
- scalardb - PutIf 与 PutIfExists 和 PutIfNotExists 有何不同
- azure - 如何备份 Azure 逻辑应用程序?
- image - 如何使用 Conv2D 在 Tensorflow 中进行索引卷积类型操作?
- json - 必须匹配返回大量文档的 URL 地址 - Elasticsearch