当前位置: 首页 > 面试题库 >

SQLite中WHERE子句中的聚合函数

谷梁星雨
2023-03-14
问题内容

简而言之,我有一个表格,其中除其他外,还包含一个用于时间戳记的列。我想获得具有最新(即最大价值)时间戳的行。目前,我正在这样做:

SELECT * FROM table ORDER BY timestamp DESC LIMIT 1

但是我宁愿做这样的事情:

SELECT * FROM table WHERE timestamp=max(timestamp)

但是,SQLite拒绝此查询:

SQL error: misuse of aggregate function max()

该文件证实了这一行为(页面底部):

聚合函数只能在SELECT语句中使用。

我的问题是:是否可以编写查询以获取具有最大时间戳的行,而无需对select进行排序并将返回的行数限制为1?这似乎应该有可能,但是我想我的SQL-
fu并没有sn花一现。


问题答案:
SELECT * from foo where timestamp = (select max(timestamp) from foo)

或者,如果SQLite坚持将子选择视为集合,

SELECT * from foo where timestamp in (select max(timestamp) from foo)


 类似资料:
  • 我们有一个员工姓名表,其中列有ID、name、salary 查询1不起作用,但查询2起作用。从我的开发经验来看,我觉得对此可能的解释是: sum()处理参数中指定的一组值。这里传递了'salary'列,因此它必须将此列的所有值相加。但是在where子句中,记录是一个接一个地检查的,就像第一条记录1是为了测试而检查的,等等。因此,不会计算sum(工资),因为它需要访问所有列的值,然后只有它返回一个值

  • 主要内容:语法,实例SQLite的 WHERE 子句用于指定从一个表或多个表中获取数据的条件。 如果满足给定的条件,即为真(true)时,则从表中返回特定的值。您可以使用 WHERE 子句来过滤记录,只获取需要的记录。 WHERE 子句不仅可用在 SELECT 语句中,它也可用在 UPDATE、DELETE 语句中,等等,这些我们将在随后的章节中学习到。 语法 SQLite 的带有 WHERE 子句的 SELECT

  • 问题内容: 我需要检索与列表中存储的ID匹配的记录。在运行时生成的查询很简单: 相当于 很好,但是如果列表包含成百上千个ID,该怎么办?该语句将非常庞大,并且在某些时候SQL解析器可能崩溃了,或者如果不是,则性能可能会很差。 我该如何以对所检索的记录数量不太敏感的方式来执行此操作? (我不能只遍历列表并逐个检索记录的原因是,我需要数据库对我执行ORDER BY。记录必须来自按特定字段排序的数据库,

  • 问题内容: 我有下面的SQLite表,其中包含198,305个地理编码的葡萄牙邮政编码: 我在PHP中还具有以下用户定义的函数,该函数返回两个坐标之间的距离: 只有 874个 记录的距离小于或等于1 km。 问题 UDF在SQL查询中可以完美地工作,但是由于某些原因,我不能在子句中使用它的返回值-例如,如果我执行查询: 它返回1035条记录, _ 排序时间约为0.05秒, _但是 最后一条记录的距

  • 问题内容: 我有此SQL语句,并且SQL Server给我以下错误: 除非聚合不在HAVING子句或选择列表中包含的子查询中,否则它可能不会出现在WHERE子句中。 在where子句中,我只想提取最旧的未付款帐单日期大于DelinquentDaysThreshhold(以天为单位)或PastDueAmount(计算值)大于DelinquentAmountThreshold的记录。 由于某些原因,S

  • 问题内容: 我在SO上找到了一些主题,但是仍然找不到适合我的查询的设置。 这是查询,在本地主机上运行得很好: 但是在Heroku上,我 遇到了-GROUP BY子句 上面的错误, 或者在聚合函数中使用 。 然后,我在某处读到,我应该指定表中的所有列,因此我尝试了以下操作: 但这在本地主机上不起作用,在Heroku上也不行… 什么是查询的正确配置? 问题答案: 我认为您正在尝试在同一列上进行汇总和分