【问题标题】:mysql Conditionally apply multiply factor in where clausemysql有条件地在where子句中应用乘法因子
【发布时间】:2021-06-22 14:02:00
【问题描述】:

我有一个简单的表格,其中包含当天的高低值以及最后观察到的值。

我想查询表并返回最后一个值,但前提是它在高或低的一定百分比内。另外,我希望根据当天高低之间的范围(或差异)调整该百分比。

例如,假设我有以下内容:

Date High Low Last
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 或 的任何 Last 值

对于较小的范围,例如 20 - 10 =10,我想返回在 20% 或 25% 内的 Last 值。

所以我想我需要使用case语句来设置基于范围diff的乘数,然后执行(高-低),然后将diff乘以case语句中的乘数,然后确定是否最后一个小于低+目标或大于高-目标。

但我不知道如何构造该查询,如果它需要 case 语句和子选择,或者内部连接?

【问题讨论】:

  • 请分享您想要的输出。
  • 你使用的是哪个数据库?
  • mysql 目前是 5.6 但计划很快升级到 8.0。
  • 从上表中,所需的输出将返回 4 条记录,除了 Last value = 30 的行。

标签: mysql sql conditional-statements case


【解决方案1】:

我认为这是您要查找的查询:

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)

输出:

Date High Low Last
2021-01-02 90 10 15
2021-01-03 90 10 90
2021-01-04 20 10 12
2021-01-05 20 10 18

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多