SQL 用于从特定组 [symbol] 中删除特定行 [time] 的语法
SQL syntax for removing a specific row [time] from a specific group [symbol]
我 运行 处于我 SQL 查询知识的边缘,可以在正确的方向上使用一个点。 (我正在使用 Presto,但理想情况下这无关紧要,因为 Presto 使用常见的 SQL 语法。)
我想做的是始终仅在 'VIX' 符号上排除 9:31:00 [QuoteTime]。如果可能的话,我只想在 [Bid] 和 [Ask] 为 0 时排除 9:31:00 VIX [QuoteTime] 行。
我已经将 HAVING 子句作为 WHERE 子句的 alternative/addition 进行了研究。我没有成功将其集成到我的查询中。
我已经查看了 LIKE 子句以找到 9:31:00 时间。我也很担心我是否有能力有效地写这篇文章。
我的努力是将它们结合起来以创建正确且最有效的查询。
这是我的数据:
+---------------+--------+---------+---------+
| QuoteTime | Symbol | Bid | Ask |
+---------------+--------+---------+---------+
| 09:31:00 | VIX | 0 | 0 |
| 09:32:00 | VIX | 13.24 | 13.24 |
| 09:33:00 | VIX | 13.21 | 13.21 |
| 09:31:00 | SPX | 2889.36 | 2894.18 |
| 09:32:00 | SPX | 2889.15 | 2892.99 |
| 09:33:00 | SPX | 2889.89 | 2892.71 |
| 09:31:00 | NDX | 7616.64 | 7616.64 |
| 09:32:00 | NDX | 7612.13 | 7612.13 |
| 09:33:00 | NDX | 7613.32 | 7613.32 |
+---------------+--------+---------+---------+
这是我当前的查询:
SELECT QuoteTime, Symbol, ((Bid+Ask)/2) as MidPoint
FROM schema.tablename
WHERE (Symbol IN ('SPX', 'VIX'))
下面是我的核选项。我不喜欢它,因为它可能(我不知道)在其他时间删除其他符号上包含 0 的其他行:
SELECT QuoteTime, Symbol, ((Bid+Ask)/2) as MidPoint
FROM schema.tablename
WHERE (Symbol IN ('SPX', 'VIX')) AND Bid != 0 AND Ask != 0
你可以试试下面的-
SELECT QuoteTime, Symbol, ((Bid+Ask)/2) as MidPoint
FROM schema.tablename
WHERE (QuoteTime, Symbol,Bid,Ask) not in (('09:31:00','VIX',0,0))
您想 select 符号 'SPX' 和 'VIX' 的所有行,但不包括 9:31:00 - VIX - 0 - 0。有几种表达方式. fa06 的回答中显示了一种方法。
SELECT quotetime, symbol, ((bid+ask)/2) as midpoint
FROM schema.tablename
WHERE symbol in ('SPX', 'VIX')
AND (quotetime, symbol, bid, ask) NOT IN ((time '09:31', 'VIX', 0, 0));
(编辑:你说这对你不起作用。可能是 presto 还不支持带元组的 IN
子句。)
另一个是:
SELECT quotetime, symbol, ((bid+ask)/2) as midpoint
FROM schema.tablename
WHERE symbol IN ('SPX', 'VIX')
AND (quote_time <> time '09:31' OR symbol <> 'VIX' OR bid <> 0 OR ask <> 0);
另一个是:
SELECT quotetime, symbol, ((bid+ask)/2) as midpoint
FROM schema.tablename
WHERE symbol IN ('SPX', 'VIX')
AND NOT (quote_time = time '09:31' AND symbol = 'VIX' AND bid = 0 AND ask = 0);
(如果其中一列可以为空,那么您也必须在查询中考虑这一点。例如 (ask <> 0 OR ask IS NULL)
。)
我 运行 处于我 SQL 查询知识的边缘,可以在正确的方向上使用一个点。 (我正在使用 Presto,但理想情况下这无关紧要,因为 Presto 使用常见的 SQL 语法。)
我想做的是始终仅在 'VIX' 符号上排除 9:31:00 [QuoteTime]。如果可能的话,我只想在 [Bid] 和 [Ask] 为 0 时排除 9:31:00 VIX [QuoteTime] 行。
我已经将 HAVING 子句作为 WHERE 子句的 alternative/addition 进行了研究。我没有成功将其集成到我的查询中。
我已经查看了 LIKE 子句以找到 9:31:00 时间。我也很担心我是否有能力有效地写这篇文章。
我的努力是将它们结合起来以创建正确且最有效的查询。
这是我的数据:
+---------------+--------+---------+---------+
| QuoteTime | Symbol | Bid | Ask |
+---------------+--------+---------+---------+
| 09:31:00 | VIX | 0 | 0 |
| 09:32:00 | VIX | 13.24 | 13.24 |
| 09:33:00 | VIX | 13.21 | 13.21 |
| 09:31:00 | SPX | 2889.36 | 2894.18 |
| 09:32:00 | SPX | 2889.15 | 2892.99 |
| 09:33:00 | SPX | 2889.89 | 2892.71 |
| 09:31:00 | NDX | 7616.64 | 7616.64 |
| 09:32:00 | NDX | 7612.13 | 7612.13 |
| 09:33:00 | NDX | 7613.32 | 7613.32 |
+---------------+--------+---------+---------+
这是我当前的查询:
SELECT QuoteTime, Symbol, ((Bid+Ask)/2) as MidPoint
FROM schema.tablename
WHERE (Symbol IN ('SPX', 'VIX'))
下面是我的核选项。我不喜欢它,因为它可能(我不知道)在其他时间删除其他符号上包含 0 的其他行:
SELECT QuoteTime, Symbol, ((Bid+Ask)/2) as MidPoint
FROM schema.tablename
WHERE (Symbol IN ('SPX', 'VIX')) AND Bid != 0 AND Ask != 0
你可以试试下面的-
SELECT QuoteTime, Symbol, ((Bid+Ask)/2) as MidPoint
FROM schema.tablename
WHERE (QuoteTime, Symbol,Bid,Ask) not in (('09:31:00','VIX',0,0))
您想 select 符号 'SPX' 和 'VIX' 的所有行,但不包括 9:31:00 - VIX - 0 - 0。有几种表达方式. fa06 的回答中显示了一种方法。
SELECT quotetime, symbol, ((bid+ask)/2) as midpoint
FROM schema.tablename
WHERE symbol in ('SPX', 'VIX')
AND (quotetime, symbol, bid, ask) NOT IN ((time '09:31', 'VIX', 0, 0));
(编辑:你说这对你不起作用。可能是 presto 还不支持带元组的 IN
子句。)
另一个是:
SELECT quotetime, symbol, ((bid+ask)/2) as midpoint
FROM schema.tablename
WHERE symbol IN ('SPX', 'VIX')
AND (quote_time <> time '09:31' OR symbol <> 'VIX' OR bid <> 0 OR ask <> 0);
另一个是:
SELECT quotetime, symbol, ((bid+ask)/2) as midpoint
FROM schema.tablename
WHERE symbol IN ('SPX', 'VIX')
AND NOT (quote_time = time '09:31' AND symbol = 'VIX' AND bid = 0 AND ask = 0);
(如果其中一列可以为空,那么您也必须在查询中考虑这一点。例如 (ask <> 0 OR ask IS NULL)
。)