Выберите Max DATE Record без использования коррелированного подзапроса - PullRequest
0 голосов
/ 26 марта 2020

У меня есть две разные базы данных (не только две разные таблицы). Мне нужно выбрать Max(Date) из одного database.table при присоединении к другому database.table.

В моем примере ниже я хотел бы вернуть

+-------------+-----------+-------------+
| CompanyKey  | JobDate   | CompanyName |
+-------------+-----------+-------------+
|           1 | 1/10/2020 | Alpha Co    |
+-------------+-----------+-------------+

Моё изменение этого утверждения:

SELECT  rj.*, oc.CompanyName
FROM    Resources.Jobs rj  
JOIN    Organizations.Company oc ON oc.CompanyKey = rj.CompanyKey
WHERE   rj.CompanyKey = '1'

Добавление

 AND MAX(rj.JobDate)

Возвращает Код ошибки 1111, недопустимое использование групповой функции .

Я думал о том, чтобы сделать ЛЕВОЕ СОЕДИНЕНИЕ в соответствии с документацией , но, поскольку я уже выполняю СОЕДИНЕНИЕ, чтобы получить название компании, я не был уверен, как go насчет объединения двух моих предложений JOIN.

Любая помощь?

Структура таблицы

Resources.Jobs
+------------+-----------+
| CompanyKey |  JobDate  |
+------------+-----------+
|          1 | 1/10/2020 |
|          1 | 1/9/2020  |
|          1 | 1/8/2020  |
|          2 | 1/10/2020 |
+------------+-----------+

Organizations.Company
+------------+-------------+
| CompanyKey | CompanyName |
+------------+-------------+
|          1 | Alpha Co    |
|          2 | Beta Co     |
+------------+-------------+

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

один из возможных подходов - присоединиться к встроенному представлению, которое получает одну дату задания на ключ компании, примерно так:

 SELECT ...
      , m.max_job_date
      , ...  
   FROM t

   LEFT
   JOIN (
          SELECT j.companykey
               , MAX(j.jobdate) AS max_job_date
            FROM Resources.Jobs j
           GROUP
              BY j.companykey
        ) m
     ON m.companykey = t.companykey

Запрос встроенного представления (производная таблица) m можно запустить отдельно , В контексте внешнего запроса встроенное представление работает как таблица.

0 голосов
/ 26 марта 2020

Вам нужно предложение GROUP BY, чтобы вы могли использовать статистическую функцию (например, MAX()), где должны отображаться все неагрегированные столбцы:

select oc.CompanyKey, max(rj.JobDate) JobDate, oc.CompanyName
from Resources.Jobs rj  
inner join Organizations.Company oc ON oc.CompanyKey = rj.CompanyKey
where rj.CompanyKey = 1
group by oc.CompanyKey, oc.CompanyName
...