2017-01-05 6 views
1

я в настоящее время этот запросВыберите свойство с макс в кресту применить SQL

SELECT 
    OC.*, 
    NEW.LAST_JOB_RUN_DATE 
FROM dbo.CUBES OC 
CROSS APPLY (SELECT 
    MAX(LAST_END_RUN_DATE) AS LAST_JOB_RUN_DATE 
FROM dbo.JOBS OJ 
WHERE OJ.CUBE_ID = OC.ID) NEW 

Каждый CUBE может иметь несколько JOBS. Я хочу, чтобы этот запрос возвращал мне все кубы, а также последний раз, когда выполнялась последняя работа. Это прекрасно работает. Теперь я также хочу добавить STATUS этой работы, но я не могу заставить запрос работать. Вышеприведенный запрос работает, но не возвращает мне статус, связанный с ним, и это то, что я хочу.
Есть ли способ изменить указанный выше запрос, чтобы также вернуть STATUS задания, содержащего MAX(LAST_END_RUN_DATE)?

ответ

2
SELECT 
    OC.*, 
    NEW.LAST_JOB_RUN_DATE, 
    NEW.STATUS 
FROM dbo.CUBES OC 
OUTER APPLY (SELECT TOP (1) OJ.LAST_END_RUN_DATE AS LAST_JOB_RUN_DATE, OJ.STATUS 
FROM dbo.JOBS OJ 
WHERE OJ.CUBE_ID = OC.ID 
ORDER BY OJ.LAST_END_RUN_DATE DESC) NEW 
+0

просто попытался это, она только возвращает мне кубы, которые имеют работу, если куб не имеет рабочих мест этот запрос не возвращает его – philr

+0

@thegiant Попробуйте еще раз. – DVT

+0

Это _almost_ работает, мне нужно заменить 'SELECT TOP (1)' на 'MAX', но это не работает, так как мне нужно добавить' group by', потому что max является агрегированной функцией. – philr