mysql - 如何根据条件获取最后修改的行

标签 mysql sql

我有下面提到的表格:

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 。然后将其连接回 Table1Table2 ,我们过滤掉那些最大状态为 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/

相关文章:

php - SQLSTATE[42S22] : Column not found: 1054 Unknown column '' in 'where clause' (SQL: select * from `customer` where `` = 1 limit 1)

mysql join 也获取未连接的值

sql - 如何只允许一个表的一行?

sql - PHP 正在截断 MSSQL Blob 数据 (4096b),即使在设置 INI 值之后也是如此。我缺一个吗?

mysql - SQL更新除属于特定表的记录之外的所有记录

mysql报告每日查询按类型过滤,包括丢失的分组行

MySQL - 更新连接自然顺序

MySQL GROUP_CONCAT 在多个约束条件下非常慢,但在一个约束条件下速度很快

sql - 从 yii 中的两个相关模型中检索两列的总和

java - 如何将结果集连接到字符串变量