2013-04-12 2 views
1

고객이 우리에게 고수하는 평균 시간을 계산하는 임무가 주어졌습니다. (특히 고객이 된 날부터 마지막 ​​주문을 한 날까지)임시 테이블을 채운 후 평균을 계산하십시오.

나는 제대로하고 있다고 확신하지는 않지만, 고객에게 입력 한 날짜를 모으는 것이었다. 데이터베이스로 이동 한 다음 주문 테이블로 가서 가장 최근의 주문 날짜를 잡고 임시 테이블에 덤프 한 다음이 두 날짜 간의 시간 길이를 계산 한 다음 해당 숫자를 기준으로 평균을 집계하십시오.

(나는 또 다른 wobbly wobbly time stuff를해야만한다. 그러나 이것이 내 엉덩이를 걷어차는 것이다.) 이 말의 최종 목표는 "Average on our customers are 4 년, 3 개월. " (또는 데이터를 보여줍니다 어떤이 될 수 있습니다.)

SELECT * INTO #AvgTable 
     FROM(
     SELECT DISTINCT (c.CustNumber) AS [CustomerNumber] 
     , COALESCE(convert(VARCHAR(10),c.OrgEnrollDate,101),'') AS [StartDate] 
     , COALESCE(CONVERT(VARCHAR(10),MAX(co.OrderDate),101),'')AS [EndDate] 
      ,DATEDIFF(DD,c.OrgEnrollDate, co.OrderDate) as [LengthOfTime] 

     FROM dbo.Customer c 
     JOIN dbo.CustomerOrder co ON c.ID = co.CustomerID 

     WHERE c.Archived = 0 
     AND co.Archived =0 
     AND c.OrgEnrollDate IS NOT NULL 
     AND co.OrderDate IS NOT NULL 

     GROUP BY c.CustNumber 
     , co.OrderDate 2 
     ) 

    --This is where I start falling apart 



     Select AVG[LengthofTime] 

     From #AvgTable 
+0

SQL 문과 관련하여 다음과 같은 결론을 내릴 수 있습니다. 4 년 전 단일 주문을 등록한 고객 중 일부는 현재 귀사를 방문한 클라이언트보다 훨씬 적게 '스틱'합니다. 지난 2 개월 동안 5 번 주문. 최소한 보고서에 분산을 추가하십시오. (예 : '희귀 방문자', '존 도우', '파워 쇼퍼')의 분석 빈도를 통합하여 분석하는 것이 좋습니다. 모든 의견 imho, 물론. – collapsar

답변

0

을하려고 당신은 임시 테이블에 데이터를 저장이되기 때문에 datediff의 정수 결과가 암시 적으로 다시 datetime으로 변환됩니다 (평균을 수행 할 수 없음).

임시 테이블에 평균을 저장하지 마십시오 (임시 테이블이 없어도 완전히 다른 대화입니다). 그냥 선택에서 차이를 확인하십시오.

+0

DateDiff가 INT를 반환하지 않습니까? MSDN은 그렇게한다고 말하면 Temp에 삽입 할 때 Int로 유지할 것이라고 가정했습니다. 임시 테이블이 없으면 어떻게해야합니까? 이 문제를 처리하는 가장 쉬운 방법 인 것처럼 보였습니다. – Barnie

+0

@ 바니 : 당신이 테이블의 구조를 말하고 있다고 가정하고 있었지만 질문에 그것을 보여주지 못했습니다. 점검을 위해 임시 테이블에서 *를 선택하십시오. – Limey

+0

예, 방금했는데 완벽하게 작동합니다. 나는 그것을 비행 중으로 채우고 선언하지 않으려 고했다. 도와 줘서 고마워! 나는 아직 upvote 수 없지만, 나는 이것을 정답으로 표시 할 것이다. – Barnie

1

제대로 이해한다면, 단지 내 생각은

SELECT AVG(DATEDIFF(dd, StartDate, EndDate)) AvgTime 
    FROM #AvgTable 
+0

DateDiff를 기본 삽입물의 Temp Table에 넣기 위해 스크립트를 수정했습니다. AVG 섹션은 내 엉덩이를 걷어차 기 때문에 전체 [LengthOfTime] 열의 AVG를 가져올 수 있습니다. 또한, 임시 테이블에서 데이터를 가져 오려고 시도 할 때 홀수 오류가 발생합니다. – Barnie

관련 문제