2017-07-04 12 views
-4

以下は、テーブルの説明と、テーブルにデータを読み込むためのスクリプトの挿入です。私はAurora Mysqlデータベースに取り組んでいます。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; 

以下は、私が2つの成功を得ている2つのシナリオです。理想的には、ステータスが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 ');

+0

最終ステータスが必要ですか? 'SELECT'ステータス 'FROM batch ORDER BY EndDateTime DESC LIMIT 1'?質問は明確ではありません – Peter

+0

@Strawberryは質問のタイトルに「緊急の助け」を要求し、コードを書式化するのに気を使わず、典型的な「私は必要です」と表示されます。 – CBroe

+0

今、私は正しいデータセットが何であるか混乱しています。 – Strawberry

答えて

0

など。

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 | 
+-----------------------+---------+ 
+0

助けてくれてありがとう。しかし、私は以下の2つのシナリオで正しい結果を得ていません。上記のID 10と20の挿入スクリプトは、質問ウィンドウにあります。 – Nagesh

関連する問題