SQL запрос на выбор одной зарегистрированной версии для каждой версии - PullRequest
0 голосов
/ 20 февраля 2020

Я занят созданием запроса для выбора одной зарегистрированной версии для каждой основной версии.

Запрос на выбор всех зарегистрированных версий для одного клиента выглядит следующим образом:

select JobReportFKEmpId, JobRecChangeDate, JobRecCreateDate, _JobBldvId RegisteredVersion, left(_JobBldvId,5) MainVersion, _JobDTAPId from dba.Job
where JobCusId = '36811'
and JobContext = '1099511627776'
and _JobDTAPId = 'P'
group by JobReportFKEmpId, JobRecChangeDate, JobRecCreateDate,_JobBldvId, _JobDTAPId
order by 4 desc

Какой приводит к следующему выводу Output query

Мой вывод должен быть: 3 записи, содержащие наивысшую зарегистрированную версию для каждой основной версии. Итак:

  • 19.04.22 для 19.04
  • 16.10.45 для 16.10
  • 15.10.23 для 15.10

Теперь у меня есть создал следующий запрос:

SELECT
   JobReportFKEmpId, JobRecChangeDate, JobRecCreateDate, max(_JobBldvId) , left(_JobBldvId,5) Bldv, _JobDTAPId

FROM
    (SELECT
       *,
       ROW_NUMBER() OVER (PARTITION BY left(_JobBldvId,5) ORDER BY (SELECT 1)) AS rn
    FROM
       dba.Job WHERE JobCusId = '36811'
and JobContext = '1099511627776'
and _JobDTAPId = 'P'
    ) foo
   WHERE rn = 1
   group by JobReportFKEmpId, JobRecChangeDate, JobRecCreateDate,_JobBldvId, _JobDTAPId
   order by 4 desc

, который дал мне следующий вывод:

Query output

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

1 Ответ

0 голосов
/ 20 февраля 2020

Ваши версии выглядят хорошо отформатированными, поэтому вы можете использовать оконные функции:

select j.*
from (select j.*,
             left(_JobBldvId, 5) as MainVersion,
             row_number() over (partition by JobReportFKEmpId order by left(_JobBldvId, 5) desc) as seqnum
      from dba.Job j
      where JobCusId = '36811' and
            JobContext = '1099511627776' and
            _JobDTAPId = 'P'
     ) j;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...