Разделение закончено или сгруппировано по лучшим для Mysql - PullRequest
0 голосов
/ 31 марта 2020
SELECT  P.FirstName, d.Name, EDH.StartDate
FROM HumanResources.EmployeeDepartmentHistory edh INNER JOIN HumanResources.Department d
ON EDH.DepartmentID=D.DepartmentID
INNER JOIN HumanResources.Employee e
ON EDH.BusinessEntityID=E.BusinessEntityID
INNER JOIN Person.Person P
ON E.BusinessEntityID=P.BusinessEntityID
WHERE EndDate IS NULL 
ORDER BY D.NAME;

Я пытаюсь перечислить человека в каждом отделе, который работал там дольше всего. Я знаю, что использование top (1) для каждого отдела, скорее всего, будет лучшим вариантом, но я могу понять, будет ли лучше использование раздела или группы по в этом случае. У кого-нибудь с большим умением, чем у меня, есть идеи?

1 Ответ

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

Работа дольше всего означает самую раннюю дату начала. Это предполагает:

SELECT ed.*
FROM (SELECT P.FirstName, d.Name, EDH.StartDate,
             RANK() OVER (PARTITION BY D.DepartmentID ORDER BY EDH.StartDate) as seqnum
      FROM HumanResources.EmployeeDepartmentHistory edh JOIN 
           HumanResources.Department d
           ON EDH.DepartmentID = D.DepartmentID JOIN
           HumanResources.Employee e
           ON EDH.BusinessEntityID = E.BusinessEntityID JOIN
           Person.Person P
           ON E.BusinessEntityID = P.BusinessEntityID
      WHERE EndDate IS NULL
     ) ed
WHERE seqnum = 1
ORDER BY D.NAME;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...