2013-09-30 1 views
2

각 프로젝트에서 가장 많은 시간을 근무한 직원을 선택하려하지만 각 projectID의 첫 번째 속성을 선택하는 중입니다.대부분의 시간을 근무한 직원 번호 선택

할당 테이블 :

+-----------+----------------+-------------+ 
| ProjectID | EmployeeNumber | HoursWorked | 
+-----------+----------------+-------------+ 
|  1000 |    1 |  30.00 | 
|  1000 |    8 |  75.00 | 
|  1000 |    10 |  55.00 | 
|  1100 |    4 |  40.00 | 
|  1100 |    6 |  45.00 | 
|  1200 |    1 |  25.00 | 
|  1200 |    2 |  20.00 | 
|  1200 |    4 |  45.00 | 
|  1200 |    5 |  40.00 | 
|  1300 |    1 |  35.00 | 
|  1300 |    8 |  80.00 | 
|  1300 |    10 |  50.00 | 
|  1400 |    4 |  15.00 | 
|  1400 |    5 |  10.00 | 
|  1400 |    6 |  27.50 | 
+-----------+----------------+-------------+ 

그리고 각 프로젝트에 대부분의 시간을 근무 직원을 표시하는 내보기 테이블 :

+----------------+-------+-----------+ 
| EmployeeNumber | MAX | ProjectID | 
+----------------+-------+-----------+ 
|    1 | 75.00 |  1000 | 
|    4 | 45.00 |  1100 | 
|    4 | 45.00 |  1200 | 
|    1 | 80.00 |  1300 | 
|    4 | 27.50 |  1400 | 
+----------------+-------+-----------+ 

등은 직원의 숫자 1을 보여주는 왜에 대한 모든 아이디어, 8, 6, 4, 8, 6 대신 4, 4, 1, 4?

+0

의 제한의

Create view maxmosthours AS Select project_id , max(hoursworked) hoursworked FROM Assignment AS A JOIN Employee AS E ON A.EmployeeNumber = E.EmployeeNumber GROUP BY A.PROJECTID CREATE VIEW MostHours AS SELECT E.EmployeeNumber, qry.hoursworked, ProjectID FROM Assignment AS A JOIN Employee AS E ON A.EmployeeNumber = E.EmployeeNumber inner join maxmosthours qry on a.projectID = qry.projectid and a.hoursworked = qry.hoursworked 

하나 그게 %^%의 @의 $의 %에 의해 그룹의을 employeeNumber를 추가 작업은 약 2 뷰되지 하나 ... 내 가장 최근의 코멘트에 링크를 참조입니다 , 당신은 그것을 놓쳤습니다. – Gar

답변

1

답변 중 하나에 아직 답글이 있는지 확실하지 않습니다.

Select project_id , max(hoursworked) 
FROM Assignment AS A JOIN Employee AS E 
ON A.EmployeeNumber = E.EmployeeNumber 
GROUP BY A.PROJECTID 

이 쿼리는 최대 근무 시간이 프로젝트별로 무엇인지 알려줍니다. 다시 쿼리에 참여시켜 그 작업을 수행 한 직원 ID를 얻으십시오.

CREATE VIEW MostHours AS 
SELECT E.EmployeeNumber, qry.hoursworked, ProjectID 
FROM Assignment AS A JOIN Employee AS E 
ON A.EmployeeNumber = E.EmployeeNumber 
inner join 
    (Select project_id , max(hoursworked) hoursworked 
    FROM Assignment AS A JOIN Employee AS E 
    ON A.EmployeeNumber = E.EmployeeNumber 
    GROUP BY A.PROJECTID) qry 
on a.projectID = qry.projectid and a.hoursworked = qry.hoursworked 

문법에 맞다고 생각합니다. 미안하지만 테스트 할 MySQL 영역이 없습니다. 논리는 간단합니다 ... subquery를 사용하여 projectID와 max hoursworked를 찾고 내부적으로이를 직원/할당 쿼리에 결합하십시오. 이 필터는 projectID에서 작업 한 최대 시간 만 남기고 필터 역할을합니다. 이 방법은 2 명의 사람들이 똑같이 대부분의 시간을 작업했을 때 프로젝트에 2 행을 반환하는 추가 이점이 있습니다.

덧붙여 말하자면 ... 현재보고있는 동작에 대한 이유는 전적으로 MYSQL입니다. 다른 대부분의 엔진은 employeeID가 그룹 별 명세서의 일부가 아니며 바로 실패한다는 오류를 반환합니다. MYSQL은 어떤 이유로 괜찮아 무작위로 다시 employeeIDs 중 하나 제공 (또는 무엇이든 필드가 제대로 cluase에 의해 그룹에 지정되지 않은) 결정

편집 : 우리는 MYSQL에없는 경우 일 것이다

. MYSQL

+0

오류 1349 (HY000) :보기의 SELECT에 FROM 절의 하위 쿼리 –

+0

이 포함되어 있습니다. MYSQL에이 오류가 있다는 것을 잊었습니다. http://stackoverflow.com/questions/8428641/views-select-contains-a-subquery-in-the-from-clause 거기에 나열된 솔루션은 내가보기에 subselect에서 생성 된 qry를 참조하고 그것. 답변을 수정하겠습니다. – Twelfth

관련 문제