如何解决mysql 在where子句中有条件地应用乘法因子
我有一个简单的表格,其中包含当天的高低值以及最后观察到的值。
我想查询表并返回最后一个值,但前提是它在高或低的一定百分比范围内。此外,我希望根据当天高低之间的范围(或差异)调整该百分比。
例如,假设我有以下内容:
日期 | 高 | 低 | 最后 |
---|---|---|---|
2021-01-01 | 90 | 10 | 30 |
2021-01-02 | 90 | 10 | 15 |
2021-01-03 | 90 | 10 | 90 |
2021-01-04 | 20 | 10 | 12 |
2021-01-05 | 20 | 10 | 18 |
我想根据高低范围计算一个目标,这样我就可以返回最后一个值,当它们在一个大范围之间的差异的 10% 之内时,比如 90-10 = 80,所以在 8 之内。所以返回任何 >=82 或 的最后一个值
对于一个小范围,比如 20 - 10 =10,我想返回最后一个在 20% 或 25% 以内的值。
所以我想我将需要使用case语句根据范围差异设置乘数,然后执行(高-低),然后将差异乘以case语句中的乘数,然后确定是否最后一个小于低 + 目标或大于高 - 目标。
但我不知道如何构造该查询,如果它需要 case 语句和子选择,或者内部联接?
解决方法
我认为这就是您要查找的查询:
SELECT *
FROM table t
WHERE CASE WHEN ((High - Low) >= 50)
THEN Last <= Low + ((High - Low) * 0.1) OR Last >= High - ((High - Low) * 0.1)
ELSE Last <= Low + ((High - Low) * 0.25) OR Last >= High - ((High - Low) * 0.25)
END;
我不知道你是如何区分小范围和大范围的,我使用 (High - Low) >= 50 表示大范围,而 (High - Low)
输出:
日期 | 高 | 低 | 最后 |
---|---|---|---|
2021-01-02 | 90 | 10 | 15 |
2021-01-03 | 90 | 10 | 90 |
2021-01-04 | 20 | 10 | 12 |
2021-01-05 | 20 | 10 | 18 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。