0

为什么要查询:

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 时间的行。

4

1 回答 1

2

恐怕您必须在这里使用子查询。

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

顺便说一句,SQLite 对 MIN/MAX 进行了有趣的优化:

假设存在适当的索引,将优化以下形式的查询以在对数时间内运行:

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

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

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

于 2012-04-03T20:48:21.083 回答