2017-12-06 4 views
0

バックアップ情報(backupInfoTable)を含むテーブルから、失敗したバックアップジョブをクエリしようとしています。SQLクエリ、クエリをより効率的にするにはどうすればよいですか? /全く違ったものを使う?

letが、私はバックアップジョブ情報の次の表を持っていると言う:

jobName| instanceName | jobStatus | date 
________________________________________ 
one |first instance| failed | 12/16/2017 
one |first instance| success | 1/1/2017 
one |secondInstance| failed | 1/1/2017 
one |third instance| success | 12/14/2017 
two |first instance| success | 1/1/2017 
two |first instance| failed | 1/1/2016 
three |first instance| failed | 12/14/2017 

私は最新のバックアップが失敗したバックアップであるレコードのみを照会したいと思います。
最新のバックアップが成功した場合、そのバックアップは関係なく、クエリは無視します。

例えばクエリ結果は次のようになります。私が思いついた

one |first instance| failed | 12/16/2017 
one |secondInstance| failed | 1/1/2017 
three |first instance| failed | 12/14/2017 

解決策は次のとおりです。

select distinct 
jobName,instanceName,jobStatus,date 
from 
(
    select distinct 
      jobName,instanceName,jobStatus,MAX(date) as ArecentDate 
    from backupInfoTable 
    group by jobName,instanceName,jobStatus 
)as A 
inner join 
(
select distinct 
    jobName,instanceName,MAX(date) as BrecentDate 
from backupInfoTable 
group by jobName,instanceName 
) as B 
ON A.ArecentDate=B.BrecentDate AND 
A.jobName=B.jobName AND 
A.instanceName=B.instanceName 
WHERE T.jobStatus='failed' 

が、それを実行するのに長いへの道を取る。.. がありますより良い解決策はありますか?

ありがとうございました!

答えて

10

のような何か:

with q as 
(
    select jobName, instanceName, jobStatus, date, 
      row_number() over (partition by jobName, instanceName order by date desc) rn 
    from backupInfotable 
) 
select jobName, instanceName, jobStatus, date 
from q 
where rn = 1 
    and jobStatus = 'failed' 
関連する問題