mysql - 从 SQL 中选择最佳结果

标签 mysql sql greatest-n-per-group

我认为这是一个简单的问题,但我似乎无法解决它。

我想从一个表中选择最新的结果并将其与另一个表中的单个元素连接起来。

更好地说,这是一个简单的模式:

Table 1 - Person
personId -PK - INT - AUTO ID
name - VARCHAR

Table 2 - Event
eventId - PK - INT - AUTO ID
personId - FK
timestamp  - DATETIME
event - ENUM ('Went Out', 'Came back')

我想做的是返回所有人员的列表以及每个人执行的最新操作

示例结果:

name| personId | timestamp | eventId | event

bob | 1 | 2011-08-7 3 | 'went out'

我做了一个连接两个表的简单查询,然后按 personId 分组并按时间戳排序,但返回的结果始终是此人的第一个操作,而不是他们的最新操作。

有什么想法吗?

最佳答案

SELECT 
  t1.Name,
  t1.PersonId,
  t2.TimeStamp,
  t2.EventId,
  t2.Event
FROM Table1 t1
INNER JOIN Table2 t2 ON t2.PersonId = t1.PersonID
INNER JOIN (SELECT
              PersonId,
              MAX(TimeStamp) as LastEventDateTime
            FROM Table2 
            GROUP BY PersonID) LE 
  ON LE.PersonID = t2.PersonID 
    AND LE.LastEventDateTime = t2.TimeStamp

关于mysql - 从 SQL 中选择最佳结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821739/

相关文章:

php - 在mysql中选择具有最大时间戳的多条记录

php - 使用PHP将数组一一存储在MySQL中

php - MySQL:使用 MySQL 相关性搜索的特殊搜索算法

c# - 在 MySql.Data.EntityFrameworkCore 中找不到 Database SetInitializer

mysql - Docker,同一网络上的多个 MySQL 容器 - 间歇性连接问题

MYSQL ERROR 1248 我卡住了

sql - 事务在触发器中结束 批处理已中止

mysql - 在 MySQL 中使用 SELECT ... WHERE id = 0 on VARCHAR id 的意外结果

mysql - 基于 mysql 查询中最近日期的每组最大 N

mysql - 具有多个条件的 SQL group by