group by后的表达式具有相同的结果

时间:2012-04-03 20:34:00

标签: sqlite

为什么查询:

SELECT id, MAX(probe_time) AS Expr1
FROM app_states
GROUP BY logon_id

SELECT id, MIN(probe_time) AS Expr1
FROM app_states
GROUP BY logon_id

具有相同的id结果。

我希望为每个用户选择MAX或MIN时间的行。

1 个答案:

答案 0 :(得分:2)

我担心你不得不在这里使用子查询。

SELECT id, probe_time
FROM app_states
WHERE probe_time = (SELECT MAX(probe_time) from app_states GROUP BY logon_id)

BTW ,SQLite对MIN / MAX进行了有趣的优化:

  

如果存在适当的指数,以下形式的查询将被优化为以对数时间运行:

 SELECT MIN(x) FROM table;
 SELECT MAX(x) FROM table;
     

为了进行这些优化,它们必须以上面显示的形式出现 - 仅更改表和列的名称。不允许添加WHERE子句或对结果执行任何算术运算。结果集必须包含单个列。 MIN或MAX函数中的列必须是索引列。

- http://www.sqlite.org/optoverview.html#minmax