2013-08-20 4 views
-2

다음 테이블에는 기계가 차량에 할당 된 테이블이 있습니다. 나는 모든 과제를 합산하는 방법을 알아 내고 각각의 기법에 대한 모든 과제를 빼기 위해 노력하고 있습니다.재 할당 레코드를 계산하는 SQL 쿼리 로직

결과는 기계공 N0055345는 2 가지 지정이 있어야하며 기계공 N0057581은 0을 가져야합니다 (재 할당으로 인해).

Auto ID EntryDate  Mechanic ID  Vehicle Type 
1022013 8/17/2013  N0055345   CAR 
1022011 8/15/2013  N0057581   CAR 
1022011 8/19/2013  N0055345   CAR 

감사합니다, 브래드

답변

0

결과 기계공 N0055345 2 개 과제 있어야되어야하며 정비사 N0057581 0 (인해 다시 assignement)를 가져야한다.

데이터를 얻는 방법에 대한 표시가 없습니다. 이것이 원하는 데이터 세트라면 기계공의 최신 할당을 찾지 않고 현재 할당 된 것의 합계가 필요합니다. 마찬가지로 데이터에서 재 할당이 무엇인지를 보여주는 것은 없습니다.

현재이 작업을 수행 할 방법이없고 재 할당 할 때 할당 된 레코드를 제거하지 않는 경우 테이블에 "CurrentlyAssigned"플래그를 추가 한 다음 필터링 할 수 있습니다. 그들이 재 할당되면 깃발을 전환하십시오.

테이블 데이터 (할당)

AutoID EntryDate MechanicID VehicleType CurrentlyAssigned 
1022011 8/19/2013 N0055345 CAR   1 
1022011 8/18/2013 N0057581 CAR   0 
1022014 8/15/2013 N0055345 CAR   1 

쿼리

SELECT MechanicID, COUNT(*) as [NumberOfAssignments] 
FROM Assignments 
WHERE CurrentlyAssigned = 1 
GROUP BY MechanicID 

출력

MechanicId NumberOfAssignments 
N0055345  2 

당신이 더 할당 가진 사람, 0/1을 사용하는 혜택을 포함 할 경우 플래그는 합계 할 수 있음을 의미합니다.

쿼리

SELECT MechanicID, SUM(CONVERT(INT,CurrentlyAssigned)) as [NumberOfAssignments] 
FROM Assignments 
GROUP BY MechanicID 

출력

MechanicId NumberOfAssignments 
N0055345  2 
N0057581  0 
0

그래서 내가 여기에 갈거야 이론 I는 auto_id 당 "최신"레코드에 할당 한 역학을 계산 할 것입니다.

SELECT mechanic 
    , Count(*) 
FROM (
     SELECT mechanic 
      , Row_Number() OVER (PARTITION BY auto_id ORDER BY entry_date DESC) As row_num 
     FROM your_table 
     ) As x 
WHERE row_num = 1 
GROUP 
    BY mechanic 
0

은 당신이 찾고있는 무슨 역학에 대한 현재 과제이다. 따라서 각 자동에 대한 최신 레코드를 선택해야합니다. 데이터베이스 창 기능을 지원하는 경우, 당신은 쉽게 최대를 찾아 sum() 문에서 비교를 수행 할 수 있습니다

SELECT mechanic, sum(case when entrydate = maxdate then 1 else 0 end) 
FROM (SELECT mechanic, max(entrydate) OVER (PARTITION BY autoid) as maxdate 
     FROM t 
    ) t 
GROUP BY mechanic; 

데이터를 필터링하지 않는 것이 중요합니다, 그렇지 않으면 0 자동차를 가지고있는 역학을 잃은 것입니다.