如何在Mysql中从表中获取最新状态
下面是表说明和将数据加载到表中的插入脚本。我正在开发Aurora 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
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的插入脚本。