;WITH LAST_FULL_BACKUP_LIST AS ( SELECT SYSDBLIST.name AS Name, MAX(BUSETS.backup_finish_date) AS Last_Backup_Finish_DateTime FROM MASTER.sys.databases AS SYSDBLIST LEFT OUTER JOIN msdb.dbo.backupset AS BUSETS ON SYSDBLIST.name = BUSETS.database_name WHERE SYSDBLIST.name<>'tempdb' AND BUSETS.[type] ='D' OR BUSETS.[type] IS NULL GROUP BY SYSDBLIST.name ) , LAST_DIFFERENTIAL_BACKUP_LIST AS ( SELECT SYSDBLIST.name AS Name, MAX(BUSETS.backup_finish_date) AS Last_Backup_Finish_DateTime FROM MASTER.sys.databases AS SYSDBLIST LEFT OUTER JOIN msdb.dbo.backupset AS BUSETS ON SYSDBLIST.name = BUSETS.database_name WHERE SYSDBLIST.name<>'TempDB' AND BUSETS.[type] ='I' GROUP BY SYSDBLIST.name ) , LOG_BACKUP_LIST AS ( SELECT SYSDBLIST.name AS Name, BUSETS.backup_finish_date AS Backup_Finish_DateTime, ROUND(((BUSETS.backup_size/1024)/1024),2) AS Backup_Size_MB, ROW_NUMBER() OVER(Partition by SYSDBLIST.name ORDER BY BUSETS.backup_finish_date DESC) AS RevOrderBuDate FROM MASTER.sys.databases AS SYSDBLIST LEFT OUTER JOIN msdb.dbo.backupset AS BUSETS ON SYSDBLIST.name = BUSETS.database_name WHERE SYSDBLIST.name<>'TempDB' AND BUSETS.[type] ='L' ) , LAST_LOG_BACKUP_LIST AS (SELECT Name, Backup_Finish_DateTime AS Last_Backup_Finish_DateTime, Backup_Size_MB AS Log_Backup_Size_MB FROM LOG_BACKUP_LIST WHERE RevOrderBuDate=1 ) SELECT case when DATEDIFF(DAY,BUSETS.backup_finish_date,GETDATE()) <=1 then 'OK' when DATEDIFF(DAY,BUSETS.backup_finish_date,GETDATE()) is null then 'ERROR' when DATEDIFF(DAY,BUSETS.backup_finish_date,GETDATE()) > 3 then '!!' when DATEDIFF(DAY,BUSETS.backup_finish_date,GETDATE()) > 1 then '-->' end as Status, SERVERPROPERTY('Servername') AS ServerName, SYSDBLIST.name AS Database_Name, SYSDBLIST.Recovery_model_desc, CASE WHEN BUSETS.backup_set_id IS NULL THEN 'NO Backup' ELSE 'Backup Complete' END AS Backup_Completed, BUSETS.backup_start_date AS Backup_Start_DateTime, BUSETS.backup_finish_date AS Backup_Finish_DateTime, DATEDIFF(MINUTE, BUSETS.backup_start_date, BUSETS.backup_finish_date) AS Duration_Min, (DATEDIFF(DAY,BUSETS.backup_finish_date,GETDATE())) AS Days_Since_Last_Backup, LASTDIFFBACKUP.Last_Backup_Finish_DateTime AS Last_Differential_Finish_DateTime, (DATEDIFF(DAY,LASTDIFFBACKUP.Last_Backup_Finish_DateTime ,GETDATE())) AS Days_Since_Last_Differential_Backup, LASTLOGBACKUP.Last_Backup_Finish_DateTime AS Last_Log_Finish_DateTime, (DATEDIFF(DAY,LASTLOGBACKUP.Last_Backup_Finish_DateTime,GETDATE()))AS Days_Since_Last_Log_Backup, LASTLOGBACKUP.Log_Backup_Size_MB AS LOG_Backup_Size_MB, CASE WHEN BUSETS.[type] = 'D' THEN 'Full Backup' WHEN BUSETS.[type] = 'I' THEN 'Differential Database' WHEN BUSETS.[type] = 'L' THEN 'Log' WHEN BUSETS.[type] = 'F' THEN 'File/Filegroup' WHEN BUSETS.[type] = 'G' THEN 'Differential File' WHEN BUSETS.[type] = 'P' THEN 'Partial' WHEN BUSETS.[type] = 'Q'THEN 'Differential partial' END AS Backup_Type, ROUND(((BUSETS.backup_size/1024)/1024),2) AS Backup_Size_MB FROM MASTER.sys.databases AS SYSDBLIST LEFT OUTER JOIN msdb.dbo.backupset AS BUSETS ON SYSDBLIST.name = BUSETS.database_name LEFT OUTER JOIN msdb.dbo.backupmediafamily AS BUMEDFAM ON BUSETS.media_set_id = BUMEDFAM.media_set_id INNER JOIN LAST_FULL_BACKUP_LIST AS LASTBACKUP ON SYSDBLIST.Name=LASTBACKUP.Name AND ISNULL(BUSETS.backup_finish_date,'01/01/1900') = ISNULL(LASTBACKUP. Last_Backup_Finish_DateTime,'01/01/1900') LEFT OUTER JOIN LAST_DIFFERENTIAL_BACKUP_LIST AS LASTDIFFBACKUP ON SYSDBLIST.Name=LASTDIFFBACKUP.Name LEFT OUTER JOIN LAST_LOG_BACKUP_LIST AS LASTLOGBACKUP ON SYSDBLIST.Name=LASTLOGBACKUP.Name WHERE SYSDBLIST.name<>'TempDB'