Как вернуть дополнительные поля на основе агрегатной функции? - PullRequest
0 голосов
/ 03 июля 2010

У меня есть две таблицы,

jobcli

  • client_id
  • job_id

работа

  • job_id
  • jobTitle
  • STARTDATE
  • projectmgr

У меня возникли проблемы с отображением client_id, job_id, jobTitle, startDate и projectmgr в запросе, где результаты сгруппированы по client_id и имеют максимум даты.

Пока что я могу получить список, который сгруппирован в client_id с соответствующим им максимумом (startDate).

SELECT client_id, MAX (startDate) AS LastJob FROM jobcli ВНУТРЕННИЕ РЕКЛАМНЫЕ вакансии НА jobcli.job_id = dbo.jobs.id GROUP BY jobcli.client_id

Этот запрос возвращает только 2 поля, client_id и LastJob, но я также хочу отобразить job_id, projectmrg и title для последней работы.

Этот сценарий предназначен для SQL Server 2005. Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 03 июля 2010

Это самая большая проблема для каждой группы, которая возникала десятки раз при переполнении стека.

Вот несколько решений:

SELECT j1.*
FROM jobcli j1
WHERE NOT EXISTS (
    SELECT * FROM jobcli j2 
    WHERE j1.client_id = j2.client_id 
      AND j1.startDate < j2.startDate
);

Или, так как вы используете Microsoft SQL Server 2005, вы можете использовать функции управления окнами:

WITH rownumbered_jobcli AS (
  SELECT j.*, ROW_NUMBER() OVER (PARTITION BY j.client_id 
                                 ORDER BY j.startDate DESC) AS RN
  FROM jobcli;
)
SELECT * FROM rownumbered_jobcli WHERE RN = 1;
...