mysql - 如何在一对多关系上 SELECT MySQL 1-to-LAST

标签 mysql one-to-many greatest-n-per-group one-to-one

我有 2 个表 -- 表 1 是主文件,表 2 是事件文件。

关系是一对多。

我正在制作一份报告,我想要返回的只是每个主文件行仅连接到相关主 ID 的最后一个事件行。

我不确定如何请求最后一个事件行。我下面的代码返回每个事件行(理所当然)。

感谢您的帮助。

    SELECT *
    FROM master_file AS master
    INNER JOIN activity_file AS activity ON activity.id = master.id
    ORDER BY master.display_name

事件文件有一个名为 entry_date 的列。它是记录每个事件的日期和时间戳。我只想选择最后一个 entry_date

例如:

表 2 - 事件如下所示

ID ACTIVITY ENTRY_DATE
1 Update 2012-08-01 09:00:00
1 Edit 2012-08-01 13:45:15
3 Create 2012-07-15 10:09:52
3 Delete 2012-07-22 23:02:00
3 Add 2012-08-05 04:33:00
4 Edit 2012-08-03 15:12:00

最佳答案

解决此问题的一种标准方法是创建一个内联 View ,以查找每个 ID 的最后一个 entry_date。

SELECT *
    FROM master_file AS master
    LEFT JOIN activity_file AS activity ON activity.id = master.id
    LEFT JOIN (select id , max(entry_date) entry_date
                From activity_file 
                group by id) last_activity
    ON activity_file.id = last_activity.id
      and  activity_file.entry_date= last_activity.entry_date

    ORDER BY master.display_name

这种方法的一个问题是对于给定的 id,您可能有不止一条具有 max(entry_date) 的记录。您要么需要让您的业务规则来处理这个问题(例如,只需为该案例显示多个记录),要么您需要找出决胜局。你最不想做的就是让它成为非确定性的

关于mysql - 如何在一对多关系上 SELECT MySQL 1-to-LAST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11847931/

相关文章:

MySql 字符串替换查询不起作用

fluent-nhibernate - 使用 fluent-nhibernate,是否有约定使一对多关系中的外键列不为空?

c - 按负计数右移不仅未定义,而且在 clang 中映射为一对多

mysql - 查找/删除大数据中的重复项

php - 包括 file.php + id。这可以用 php 实现吗?

sql - 加入包含多条记录的第二个表,取最新的

mysql - 如何在一个查询中使 SQL 查询更干净、更好?

php - Laravel Eloquent 选择具有 maxcreated_at 的所有行

php - 从表中选择所有值=来自另一个表的多个值

java - 如何在@Query注释中获取特定城市及其所有相关学校