【问题标题】:Can there be list in SQL querySQL查询中可以有列表吗
【发布时间】: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] &lt; open[2]) and (close[0] &gt; close[2]) and (open[0] &gt; close[1]) 执行查询?

喜欢而不是(d2.open &lt; d1.open) AND (d3.close &gt; d1.close) AND (d3.open &gt; d2.close),我可以使用(open[1] &lt; open[2]) and (close[0] &gt; close[2]) and (open[0] &gt; close[1])吗?我还需要在 SQL 查询中做哪些其他更改。

【问题讨论】:

  • 您在上面共享的表格。是你要操作的 Table 还是需要的结果?
  • 添加一个clear示例,说明您的数据期望的结果以及逻辑的清晰描述- 记住互联网上的陌生人不知道你知道什么。
  • @Stu 我希望编辑更清晰

标签: sql python-3.x postgresql list where-clause


【解决方案1】:

如果您想知道“下一个”open 是否小于当前行中的那个,请使用lead()

SELECT d.* 
FROM (SELECT d.*,
             LEAD(open) OVER (PARTITION BY script_id ORDER BY date_time) as next-open
      FROM data d
     ) d
WHERE next_open < open

【讨论】:

  • 抱歉,我刚刚编辑了有问题的数据库和原始查询,其中有 3 个 where 子句。目前正在寻找列表类型的SQL查询
  • 如何在问题的查询中实现?
【解决方案2】:

例如,您可以使用IN | NOT IN 运算符来检查列表

Select * from Table WHERE Table.date_time IN (Select dateColumn from Table where dateColumn > '9:35:00')

【讨论】:

  • 那么如何检查打开的值呢?
  • 你的问题还是有点不清楚。您想从单个表中检索数据吗?你上面显示的表,是你想要的结果还是你在db中的表?
  • 我在数据库中的表
  • In 和 Not In 是在 where 子句中处理列表的方式。由于您的要求不清楚,我只能在一定程度上帮助您。如果您想从单个表中检索数据,也可以使用自联接
  • SQL 查询来获取 9:40 打开 > 9:35 打开的数据 - 这就是我需要的
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2022-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
相关资源
最近更新 更多