2
私は以下のロジックにぶつかっています。ステータスが失敗したときはいつでも、以前に成功したときにはmax(EndTime)
にする必要があります。たとえば、以下のデータの場合、Batch = 3987
の場合、lastrefreshdate
は23-01-2017
である必要がありますが、13-02-2017
ではありません。TSQL - 最後に成功した日付を取得
以下は、データとクエリのスニペットです。
Batch TableName IsFullLoad Status EndTime LastRefreshDate
5524 SA 1 Loaded 13-02-2017 13-02-2017
4746 SA 1 Loaded 06-02-2017 06-02-2017
4174 SA 1 Loaded 31-01-2017 31-01-2017
3987 SA 1 Failed 30-01-2017 13-02-2017
3372 SA 1 Loaded 23-01-2017 23-01-2017
2651 SA 1 Loaded 16-01-2017 16-01-2017
1987 SA 1 Loaded 09-01-2017 09-01-2017
1379 SA 1 Loaded 02-01-2017 02-01-2017
835 SA 1 Loaded 26-12-2016 26-12-2016
189 SA 1 Loaded 19-12-2016 19-12-2016
52 SA 1 Loaded 17-12-2016 17-12-2016
SQL:
SELECT TOP 40*
FROM (
SELECT
bi.Id,
bi.TableName,
bi.IsFullLoad,
bi.JobId,
[Status],
bi.CompletTime,
CASE
WHEN bi.IsFullLoad = 1 AND bi.[Status] = 'Failed'
THEN
(
SELECT MAX(CompletTime) FROM Audit.T1 bb
WHERE [Status]= 'Loaded' AND bb.IsFullLoad = 1 AND bb.TableName = bi.TableName
GROUP BY bb.TableName
)
ELSE
bi.CompletTime
END AS Validto
FROM Audit.T1 bi
WHERE TableName = 'Salesforce_Account' AND bi.IsFullLoad = 1
) x
ORDER BY x.CompletTime desc
すべてのヘルプは本当に感謝しています。 ありがとうございました。