如何在Mysql中从表中获取最新状态

如何在Mysql中从表中获取最新状态,mysql,Mysql,下面是表说明和将数据加载到表中的插入脚本。我正在开发Aurora Mysql数据库 DROP TABLE IF EXISTS batch; CREATE TABLE `Batch` ( `ID` varchar(50) DEFAULT NULL, `StepID` varchar(50) DEFAULT NULL, `FileName` varchar(200) DEFAULT NULL, `StartDateTime` datetime D

下面是表说明和将数据加载到表中的插入脚本。我正在开发Aurora Mysql数据库

 DROP TABLE IF EXISTS batch;

 CREATE TABLE `Batch` (
      `ID` varchar(50) DEFAULT NULL,
      `StepID` varchar(50) DEFAULT NULL,
      `FileName` varchar(200) DEFAULT NULL,
      `StartDateTime` datetime DEFAULT NULL,
      `EndDateTime` datetime DEFAULT NULL,
      `Status` varchar(50) DEFAULT NULL,
      `ETLLoadDate` datetime NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
下面是两个场景,我在这两个场景中获得了成功。理想情况下,状态失败10次,成功20次

插入批次值(10,10.1、'a.csv'、'2017-07-06 11:16:07'、'2017-07-06 11:17:07'、'FAILED'、'2017-07-06 11:17:07'); 插入批次值(10,10.1,'b.csv'、'2017-07-06 11:18:08'、'2017-07-06 11:19:07'、'SUCCESS'、'2017-07-06 11:19:07'); 插入批次值(10,10.1,'c.csv'、'2017-07-06 11:19:08'、'2017-07-06 11:20:07'、'SUCCESS'、'2017-07-06 11:20:07'); 插入批次值(10,10.1、'd.csv'、'2017-07-06 11:20:08'、'2017-07-06 11:21:07'、'SUCCESS'、'2017-07-06 11:21:07'); 插入批次值(10,10.2,'e.csv'、'2017-07-06 11:21:08'、'2017-07-06 11:22:07'、'SUCCESS'、'2017-07-06 11:22:07'); 插入批次值(10,10.3,'f.csv'、'2017-07-06 11:22:08'、'2017-07-06 11:23:07'、'SUCCESS'、'2017-07-06 11:23:07')

插入批次值(20,20.1、'a.csv'、'2017-07-06 11:16:07'、'2017-07-06 11:17:07'、'FAILED'、'2017-07-06 11:17:07'); 插入批次值(20,20.1,'b.csv'、'2017-07-06 11:18:08'、'2017-07-06 11:19:07'、'SUCCESS'、'2017-07-06 11:19:07'); 插入批次值(20,20.1,'c.csv'、'2017-07-06 11:19:08'、'2017-07-06 11:20:07'、'SUCCESS'、'2017-07-06 11:20:07'); 插入批次值(20,20.1、'd.csv'、'2017-07-06 11:20:08'、'2017-07-06 11:21:07'、'SUCCESS'、'2017-07-06 11:21:07'); 插入批次值(20,20.2,'e.csv'、'2017-07-06 11:21:08'、'2017-07-06 11:22:07'、'SUCCESS'、'2017-07-06 11:22:07'); 插入批次值(20,20.3,'f.csv'、'2017-07-06 11:22:08'、'2017-07-06 11:23:07'、'SUCCESS'、'2017-07-06 11:23:07'); 插入批次值(20,20.1、'a.csv'、'2017-07-06 11:16:07'、'2017-07-06 11:17:07'、'SUCCESS'、'2017-07-06 11:17:07')

例如

SELECT DISTINCT DATE(a.startdatetime)
              , COALESCE(b.status,a.status) status 
  FROM 
     ( SELECT x.* 
         FROM batch x
         JOIN
            ( SELECT id
                   , stepid
                   , DATE(startdatetime) dt
                   , MAX(startdatetime) max_dt
                FROM batch
               GROUP
                  BY id
                   , stepid
                   , dt
            ) y
           ON y.id = x.id
          AND y.stepid = x.stepid
          AND y.dt = DATE(x.startdatetime)
          AND y.max_dt = x.startdatetime
     ) a
  LEFT
  JOIN
     ( SELECT x.* 
         FROM batch x
         JOIN
            ( SELECT id
                   , stepid
                   , DATE(startdatetime) dt
                   , MAX(startdatetime) max_dt
                FROM batch
               GROUP
                  BY id
                   , stepid
                   , dt
            ) y
           ON y.id = x.id
          AND y.stepid = x.stepid
          AND y.dt = DATE(x.startdatetime)
          AND y.max_dt = x.startdatetime
     ) b
    ON b.id = a.id
   AND DATE(b.startdatetime) = DATE(a.startdatetime)
   AND b.status = 'failed'
 WHERE a.status = 'success';
+-----------------------+---------+
| DATE(a.startdatetime) | status  |
+-----------------------+---------+
| 2017-06-21            | SUCCESS |
| 2017-06-22            | FAILED  |
| 2017-06-24            | FAILED  |
| 2017-06-23            | SUCCESS |
+-----------------------+---------+

那么你需要最后状态吗<代码>按EndDateTime描述限制1从批次订单中选择状态`?问题不是clear@Strawberry在问题标题中要求“紧急帮助”,根本不费心格式化代码,典型的“我需要”没有任何自己的尝试发布…当然这会被否决。现在我很困惑哪一个是正确的数据集。上面有一些问题,插入脚本可以用于id 10和20。那里有很多代码。所有这些都相关吗?谢谢你的帮助。但对于以下两种情况,我没有得到正确的结果。请在问题窗口中查找上面ID 10和20的插入脚本。