GROUP BY也是SELECT非常量列

1 mysql sql select group-by greatest-n-per-group

我的数据库中有2个表:

log_visitors:
--------------------
id | host_id


log_access:
--------------------
visitor | document | timestamp
Run Code Online (Sandbox Code Playgroud)

log_access.visitor 链接到 log_visitors.id

目前,我正在使用此查询:

SELECT
    log_visitors.host_id
    , MIM(log_access.timestamp) AS min_timestamp
FROM
    log_access
    INNER JOIN log_visitors
        ON (log_access.visitor = log_visitors.id)
GROUP BY log_visitors.host_id;
Run Code Online (Sandbox Code Playgroud)

获取数据库中的MIN(timestamp)每个host_id.

这是我的问题:

我还需要document使用该时间戳来获取该访问权限...我不能简单地添加log_access.document到SELECT列表中,因为它不是常量而我不按文档分组...任何想法?

a_h*_*ame 5

您没有指定DBMS,但这是ANSI SQL(适用于大多数现代DBMS)

select *
from (
  SELECT log_visitors.host_id,
         log_visitors.document,
         log_access.timestamp
         min(log_access.timestamp) OVER (partition by log_visitors.host_id) AS min_timestamp
  FROM log_access
    JOIN log_visitors ON (log_access.visitor = log_visitors.id)
) t
where t.timestamp = t.min_timestamp
ORDER BY host_id
Run Code Online (Sandbox Code Playgroud)