【问题标题】:expression after group by has same result分组后的表达式具有相同的结果
【发布时间】:2012-04-04 04:48:21
【问题描述】:

为什么要查询:

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

【问题讨论】:

  • 你为什么选择id却按logon_id分组?
  • 这是子查询,我想将 id 用于以后的联接。我想使用上面的 linq 查询进行选择,并使用 id 进行连接。

标签: sqlite


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2022-06-10
    • 2020-04-17
    • 1970-01-01
    • 2020-08-30
    • 2016-01-09
    • 1970-01-01
    相关资源
    最近更新 更多