根据 文档、常识和一些常见 SQL 手册,
max
函数仅返回最大值。因此,选择具有最大值的行的正确方法是子查询:
select * from `table` where `a`=(select max(`a`) from `table`);
效率低下。 SQLite 中有类似
argmax
的东西吗?
是的。只需使用
select max(`a`), * from `table`;
如果单行对您来说就足够了。其余的值将属于从中获取最大值的行。
我没怎么用过 SQLite,但我想
select l.* from `table` l join (select * from `table` order by `a` desc limit 1) r on l.`a` = r.`a`;
应提供良好的性能。在
a
上建立索引应该会变得非常快。如果没有索引,它应该会导致 table
的两次序列扫描。
要获得多于一行,您的解决方案绝对不是效率低下——假设您索引了列
a
,在这种情况下您可能应该这样做。
create index myidx on mytable(a);
查询连续
max
值:
SELECT max(timestamp) FROM tableName
查询连续
min
值:
SELECT min(timestamp) FROM tableName
注意:时间戳是表中行的名称。您可以在您想要应用的地方使用它。