sql - SQL 查询 - 如何将此 excel 公式转换为查询
问题描述
我有一个现有的 excel 公式。逻辑是这样的:
- 当表 2“日期/时间”上的日期大于表 1“Open_Date”时开始查找
- 当表 2“日期/时间”上的日期小于表 1“Close_Date”时停止查找
- 如果表 1“Action”显示“买入”,则查找表 2“低”小于表 1 列 L“FixedSL”的位置。
- 如果表 1“Action”显示“卖出”,则查找表 2“高”小于表 1 列 L“FixedSL”的位置。
- 如果找到匹配项,则返回表 2 中的“日期/时间”并覆盖该行的表 1“Time_Hit_Fixed_SL”中的值。
以下是数据表的示例: 表 1
Open_Date, Close_Date, Action, FixedSL, Time_Hit_Fixed_SL
6/1/2020 3:56, 6/1/2020 4:24, Buy, 1.8502, 6/1/2020 5:01
6/1/2020 4:44, 6/1/2020 8:19, Sell, 1.8411, 6/1/2020 10:12
6/1/2020 8:22, 6/1/2020 8:54, Sell, 1.8335, 6/1/2020 10:12
表 2
Date/Time, Open, High, Low, Close
06/01/2020 03:57, 1.8503, 1.8503, 1.8501, 1.8501
06/01/2020 03:58, 1.8501, 1.8503, 1.8501, 1.8502
06/01/2020 03:59, 1.8501, 1.8504, 1.8501, 1.8504
06/01/2020 04:00, 1.8501, 1.8505, 1.8501, 1.8503
06/01/2020 04:01, 1.8504, 1.8504, 1.8504, 1.8504
表 1 第一行的论坛输出将是 06/01/2020 03:57 覆盖“Time_Hit_Fixed_SL”列中的现有值。
我想要完成的是在 SQL 中使用 2 个表中的数据执行相同的操作。
我是 SQL 新手并进行了搜索,但找不到正确的方向来获得从哪里开始编写查询以替换高级 excel 公式逻辑的指导。感谢您的帮助和指导!
解决方案
您可以使用窗口函数MIN()
来获取列的值Date/Time
。
如果您想要一个SELECT
返回预期结果的语句:
SELECT DISTINCT t1.Open_Date, t1.Close_Date, t1.Action,
COALESCE(
MIN(
CASE t1.Action
WHEN 'Buy' THEN CASE WHEN t2.Low < t1.FixedSL THEN t2.Date_Time END
WHEN 'Sell' THEN CASE WHEN t2.High < t1.FixedSL THEN t2.Date_Time END
END
)
OVER (PARTITION BY t1.Open_Date, t1.Close_Date),
t1.Time_Hit_Fixed_SL
) Time_Hit_Fixed_SL
FROM Table1 t1 LEFT JOIN Table2 t2
ON t2.Date_Time > t1.Open_Date AND t2.Date_Time < t1.Close_Date
如果你想更新Table1
:
UPDATE Table1 AS t1
SET Time_Hit_Fixed_SL = COALESCE(
(
SELECT
MIN(
CASE t1.Action
WHEN 'Buy' THEN CASE WHEN t2.Low < t1.FixedSL THEN t2.Date_Time END
WHEN 'Sell' THEN CASE WHEN t2.High < t1.FixedSL THEN t2.Date_Time END
END
)
FROM Table2 t2
WHERE t2.Date_Time > t1.Open_Date AND t2.Date_Time < t1.Close_Date
),
t1.Time_Hit_Fixed_SL
)
请参阅演示。
推荐阅读
- node.js - React 前端,Node JS 后端托管
- asp.net-mvc - 如何在 Asp.net mvc 上的 Syncfusion 条形图中绑定数据库
- key-bindings - 从文件中选择所有行并使用自定义键绑定重新缩进/重新格式化
- docker - 无法将接口连接到 Docker 容器
- plot - 为什么我添加到直方图中的正态分布是平坦的?
- reactjs - Nginx React App - 只允许访问一个位置
- javascript - 我如何从url检测flutter web中的javascript输出
- scipy - 使用 xarray DataArray 作为输入时,如何获取从 RegularGridInterpolator 返回的一维数组?
- python - 获取链接重定向到的网址的最简单方法是什么?
- php - 使用 PHP 在 MySQL 中未捕获的 PDOException