【问题标题】:SQLite Subquery Syntax Error when using Multiple Columns使用多列时的 SQLite 子查询语法错误
【发布时间】:2015-03-31 06:09:23
【问题描述】:

看起来很简单;但我无法正常工作。

select ISIN, QuoteTimestamp
from QuoteData
where (ISIN, QuoteTimestamp) IN
      (select ISIN, MAX(QuoteTimestamp) QuoteTimestamp
       from QuoteData
       group by ISIN)

这个查询给了我一个语法错误。如果我将其修改为仅使用一列(删除 MAX(QuoteTimewstamp)),它会起作用。

根据文档,这似乎是正确的。

为子查询别名添加“AS”没有区别。

这是来自 SQLite Manager 的完整错误消息。

SQLiteManager: Likely SQL syntax error: select ISIN, QuoteTimestamp
from QuoteData
where (ISIN, QuoteTimestamp) IN
       (select ISIN, MAX(QuoteTimestamp) AS QuoteTimestamp
        from QuoteData
        group by ISIN)

 [ near ",": syntax error ]
Exception Name: NS_ERROR_FAILURE
Exception Message: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]

这似乎可行,但对我来说,这似乎违反直觉。它从带有 MAX(QuoteTimestamp) 的行返回“Symbol”、“Bid”和“Ask”。

select ISIN, Symbol, Bid, Ask, MAX(QuoteTimestamp)
from QuoteData
group by ISIN

我确信 Oracle 和他们的同类会告诉我 Symbol、Bid 和 Ask 不是分组表达式。

感谢大家的帮助。

谢谢, 阿尔。

【问题讨论】:

  • 嗨,我在使用“AS”时得到了相同的结果。这是完整的错误。 SQLiteManager:可能的 SQL 语法错误:选择 ISIN,QuoteTimestamp from QuoteData where (ISIN, QuoteTimestamp) IN (select ISIN, MAX(QuoteTimestamp) AS QuoteTimestamp from QuoteData group by ISIN) [ near ",": syntax error ] 异常名称:NS_ERROR_FAILURE 异常消息:组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]
  • 请使用编辑功能将消息添加到您的问题中。
  • 请显示文档中允许多值表达式的部分。
  • 好的。我必须假设您可以像使用其他数据库一样指定多个列。感谢 cmets。

标签: sqlite group-by subquery syntax-error multiple-columns


【解决方案1】:

在 SQLite 3.7.11 或更高版本中,您根本不需要使用子查询:

select ISIN, MAX(QuoteTimestamp) QuoteTimestamp
from QuoteData
group by ISIN

【讨论】:

  • 有趣。我不认为我可以这样做,因为我想选择其他列,并且那些来自具有 MAX(QuoteTimestamp) 的行,我认为它会抱怨非分组表达式。我会玩这个。为简洁起见,我没有展示我的其他专栏。现在我明白你不能指定多个列,一切都变得更加清晰。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
相关资源
最近更新 更多