我有下面提到的表格:
Table1:
ID Unique_Key Date MapId
II-10 RTE-011 2018-04-07 15:18:25 er-12-tt
II-11 RTE-011 2018-05-17 11:44:47 er-13-td
II-12 RTE-011 2018-06-12 13:22:29 ee-13-rt
II-13 RTE-012 2018-04-07 19:17:14 eg-15-st
II-14 RTE-012 2018-04-07 21:22:37 hr-15-yt
II-15 RTE-013 2018-07-07 20:27:38 tr-16-yt
II-15 RTE-013 2018-08-07 14:18:33 tr-16-yt
Table2:
Id Status
er-12-tt Open
er-13-td Closed
er-13-rt Closed
eg-15-st Closed
hr-15-yt Pending
tr-16-yt Open
tr-16-yt Pending
通过使用上面提到的两个表,我想仅获取状态为已关闭
的记录的最新行。
我们需要排除那些任何值不等于Closed
的Unique_Key
所需的输出为:
ID Unique_Key Date MapId Id Status
II-12 RTE-011 2018-06-12 13:22:29 ee-13-rt er-13-rt Closed
II-13 RTE-012 2018-04-07 19:17:14 eg-15-st eg-15-st Closed
最佳答案
首先,在子查询中,我们确定一组 Unique_Key
的最大日期。我们过滤掉那些 Unique_Key
至少有一行包含 Status = Closed
的值,使用HAVING SUM(t2.Status = Closed) > 0
该子查询的结果集随后被用作 Derived Table 。然后将其连接回 Table1
和Table2
,我们过滤掉那些最大状态为 Closed
的情况,使用WHERE t22.Status = 'Closed'
尝试:
SELECT t11.ID,
t11.Unique_Key,
t11.Date,
t11.MapId,
t22.Id,
t22.Status
FROM Table1 AS t11
JOIN Table2 AS t22 ON t22.Id = t11.MapId
JOIN (
SELECT t1.Unique_Key,
MAX(t1.Date) AS max_Date
FROM Table1 AS t1
JOIN Table2 AS t2 ON t2.Id = t1.MapId
GROUP BY t1.Unique_Key
HAVING SUM(t2.Status = Closed) > 0
) AS dt ON dt.Unique_Key = t11.Unique_Key AND
dt.max_Date = t11.Date
WHERE t22.Status = 'Closed'
关于mysql - 如何根据条件获取最后修改的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52700438/