我有 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/