2017-11-02 1 views
1
SELECT 
    AVG(
     DATEDIFF(
      day, 
      P.[ProjectCreatedDate], 
      CASE WHEN T.[Reported Milestones] LIKE '02 Request Assigned' THEN T.[TaskActualFinishDate] 
     ) 
    ) AS AverageAssignmentAge 

위의 쿼리에서 생성 된 날짜와 요청 된 할당 날짜 사이의 평균 할당 날짜를 찾으려고합니다. 작동하지 않습니다. 어떻게 해결할 수 있습니까?AVG/Datediff/CASE가 포함 된 SQL 쿼리

+1

사용'end' 경우 후 문. –

+1

나머지 쿼리 및 샘플 데이터를 게시하고 작동하지 않는 방법을 설명하십시오. 오류 메시지가 표시되거나 잘못된 결과가 표시됩니까? 어떤 DBMS를 사용하고 있습니까? – Dai

+0

팁 : 복잡한 'SELECT' 절이있는 경우 하위 쿼리를 사용하여 논리적으로 중간 결과를 구분하여 읽기 쉽도록하는 것이 좋습니다. SQL이 여전히'SELECT'에서 반복 단계와 임시 변수를 허용하지 않는다는 것은 불행한 일입니다. – Dai

답변

0

대명사 함수 내에서 대명 수식 함수를 이동 한 다음 해당 대소 문자 식을 집계 함수 내에 포함시켜야합니다.

SELECT 
     AVG(CASE WHEN T.[Reported Milestones] LIKE '02 Request Assigned' THEN 
        DATEDIFF(DAY,P.[ProjectCreatedDate],T.[TaskActualFinishDate]) 
      END) 
     AS averageassignmentage 

참고 작업 "기간"을 다루는 "종료 날짜는"일반적으로 "그 날의 끝"을 참조하지만 DB에 기록하는 것은 "그 날의 시작"을 동일시한다 . 따라서 시작일 시작부터 끝 날짜 시작까지의 일 수를 계산하는 날짜 계산에 하나를 추가하려고합니다. SQL Fiddle

CREATE TABLE Table1 
    ([Reported Milestones] varchar(19), [ProjectCreatedDate] datetime, [TaskActualFinishDate] datetime) 
; 

INSERT INTO Table1 
    ([Reported Milestones], [ProjectCreatedDate], [TaskActualFinishDate]) 
VALUES 
    ('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'), 
    ('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'), 
    ('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'), 
    ('xxx', '2017-10-01 00:00:00', NULL), 
    ('xxx', '2017-10-01 00:00:00', NULL) 
; 

검색어 1에서

시험/예 :

SELECT 
     AVG(CASE WHEN [Reported Milestones] LIKE '02 Request Assigned' THEN 
        DATEDIFF(DAY,[ProjectCreatedDate],[TaskActualFinishDate])+1 
      END) 
     AS averageassignmentage 
    , COUNT(CASE WHEN [Reported Milestones] LIKE '02 Request Assigned' THEN 
        TaskActualFinishDate 
      END) 
     AS sample_size 
from table1 

Results :

| averageassignmentage | sample_size | 
|----------------------|-------------| 
|     10 |   3 | 
+0

질문이 지금 해결 되었습니까? 이 답변에 대해 질문이 있습니까? [help/accepting] (https://stackoverflow.com/help/someone-answers)에 대한 자세한 내용은 "[** 클릭 **] (https://ibb.co/ikqyO6)"대답을 수락하려면 –