如何在1对多关系中选择MySQL 1-to-LAST

时间:2012-08-07 14:14:05

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

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

这种关系是1对多。

我正在生成一个报告,我想要返回的是每个主文件行只加入相关主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

1 个答案:

答案 0 :(得分:4)

解决此问题的一种标准方法是创建一个内联视图,查找每个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)的记录。您需要让您的业务规则处理此问题(例如,只需显示该案例的多条记录),或者您需要找出一个平局。你想要的最后一件事是使它成为非确定性的

相关问题