在SQLite中选择具有最大/最小值的行

问题描述 投票:0回答:5

根据 文档、常识和一些常见 SQL 手册,

max
函数仅返回最大值。因此,选择具有最大值的行的正确方法是子查询:

select * from `table` where `a`=(select max(`a`) from `table`);

效率低下。 SQLite 中有类似

argmax
的东西吗?

sql sqlite max aggregate-functions
5个回答
12
投票

根据文档,SQLite允许使用

max()
选择整行:

SELECT *, max(a) FROM MyTable;

(从版本3.7.11开始支持。)


4
投票

是的。只需使用

select max(`a`), * from `table`;

如果单行对您来说就足够了。其余的值将属于从中获取最大值的行。


0
投票

我没怎么用过 SQLite,但我想

select l.* from `table` l join (select * from `table` order by `a` desc limit 1) r on l.`a` = r.`a`;

应提供良好的性能。在

a
上建立索引应该会变得非常快。如果没有索引,它应该会导致
table
的两次序列扫描。


0
投票

要获得多于一行,您的解决方案绝对不是效率低下——假设您索引了列

a
,在这种情况下您可能应该这样做。

create index myidx on mytable(a);

-1
投票

查询连续

max
值:

SELECT max(timestamp) FROM tableName 

查询连续

min
值:

SELECT min(timestamp) FROM tableName 

注意:时间戳是表中行的名称。您可以在您想要应用的地方使用它。

© www.soinside.com 2019 - 2024. All rights reserved.