【发布时间】:2021-10-22 11:40:41
【问题描述】:
我的数据库:-
| script_id | date_time | open | close |
|---|---|---|---|
| 1 | 2019-01-11 09:35:00 | 25 | 10 |
| 1 | 2019-01-11 09:40:00 | 10 | 35 |
| 1 | 2019-01-11 09:45:00 | 48 | 30 |
目前我正在使用以下 SQL 查询来获取 9:40 打开 9:35 关闭和 9:45 打开 > 9:40 关闭的数据:
SELECT d1.*
FROM data d1
WHERE d1.date_time = '2019-01-11 09:35:00'
AND EXISTS (
SELECT 1
FROM data d2
WHERE d2.date_time = '2019-01-11 09:40:00'
AND d2.script_id = d1.script_id
AND d2.open < d1.open
AND EXISTS (
SELECT 1
FROM data d3
WHERE d3.date_time = '2019-01-11 09:45:00'
AND d3.script_id = d1.script_id
AND d3.close > d1.close
AND d3.open > d2.close
));
所以,它给了我结果:
| script_id | date_time | open | close |
|---|---|---|---|
| 1 | 2019-01-11 09:35:00 | 25 | 10 |
这是正确的结果。
我们如何执行相同的查询,例如我们将按 DESC 顺序一起获取日期的数据,然后在 SQL 中以(open[1] < open[2]) and (close[0] > close[2]) and (open[0] > close[1]) 执行查询?
喜欢而不是(d2.open < d1.open) AND (d3.close > d1.close) AND (d3.open > d2.close),我可以使用(open[1] < open[2]) and (close[0] > close[2]) and (open[0] > close[1])吗?我还需要在 SQL 查询中做哪些其他更改。
【问题讨论】:
-
您在上面共享的表格。是你要操作的 Table 还是需要的结果?
-
添加一个clear示例,说明您的数据是和期望的结果以及逻辑的清晰描述- 记住互联网上的陌生人不知道你知道什么。
-
@Stu 我希望编辑更清晰
标签: sql python-3.x postgresql list where-clause