문제

다른 거래에 대한 여러 레코드가 포함 된 테이블이 있습니다.

ID  Date         REF
1   01/09/2008   A
1   11/09/2008   A
1   01/10/2008   A
2   01/09/2008   A
2   01/10/2008   A
2   01/11/2008   B
2   01/12/2008   B

그리고 나는 각 ID와 Ref의 평균 일을 갖도록 데이터를 요약하고자합니다 ... 즉

ID  Ref    Avg_Days
1   A      15
2   A      30
2   B      30

누군가 도울 수 있다면 미리 감사드립니다

도움이 되었습니까?

해결책

평균 일 차이는 a입니다 SUM 차이가 나뉘어져 있습니다 COUNT(*)

SUM 차이는 실제로 차이입니다 MIN 그리고 MAX:

SELECT  id, ref, DATEDIFF(day, MIN(date), MAX(date)) / NULLIF(COUNT(*) - 1, 0)
FROM    mytable
GROUP BY
        id, ref

다른 팁

이와 같은 것 ...이 정보가 어떻게 당신을 어떻게 도울 수 있는지 잘 모르겠습니다 .... 당신의 날을 평균화하려는 것에 대한 더 많은 정보가 필요합니다.

SELECT ID, REF, AVG(DATEPART(day, [Date]))
FROM dbo.Table1
GROUP BY ID, REF

참조:avg, 날짜 부분

SQL Server 2005를 사용하면 이것을 시도하십시오.

DECLARE @Table TABLE(
        ID INT,
        Date DATETIME,
        Ref VARCHAR(MAX)
)

INSERT INTO @Table (ID,Date,Ref) SELECT 1, '01 Sep 2008', 'A'
INSERT INTO @Table (ID,Date,Ref) SELECT 1, '11 Sep 2008', 'A'
INSERT INTO @Table (ID,Date,Ref) SELECT 1, '01 Oct 2008', 'A'
INSERT INTO @Table (ID,Date,Ref) SELECT 2, '01 Sep 2008', 'A'
INSERT INTO @Table (ID,Date,Ref) SELECT 2, '01 Oct 2008', 'A'
INSERT INTO @Table (ID,Date,Ref) SELECT 2, '01 Nov 2008', 'B'
INSERT INTO @Table (ID,Date,Ref) SELECT 2, '01 Dec 2008', 'B'


;WITH Ordered AS (
    SELECT  ID,
            Ref,
            Date,
            ROW_NUMBER() OVER (PARTITION BY ID, Ref  ORDER BY Date) SubNumber
    FROM    @Table t
)
SELECT  Ordered.ID,
        Ordered.Ref,
        AVG(DATEDIFF(dd, Ordered.Date, OrderedNext.Date)) AVG_Days
FROM    Ordered INNER JOIN
        Ordered OrderedNext ON  Ordered.ID = OrderedNext.ID
                            AND Ordered.Ref = OrderedNext.Ref
                            AND Ordered.SubNumber + 1 = OrderedNext.SubNumber
GROUP BY Ordered.ID,
        Ordered.Ref

또한 수학적으로 다음을 살펴보십시오.

말하자

([x (1) -x (0)] + [x (2) -x (1)] + [x (3) -x (2)] + ... + [x (n-1) -x (n-2)] + [x (n) -x (n-1)]) / (n-1).

상단 부분을 그대로 확장하십시오

-x (0) + x (1) -x (1) + x (2) -x (2) + x (3) - ... - x (n -2) + x (n -1) - x (N-1) + X (N)

whcih는 -x (0) + x (n)로 끝납니다.

그래서 우리는 [x (n) -x (0)] / (n -1)을 가지고 있습니다.

Count> 1의 경우 (Max -Min) / (Count -1)를 가져 가십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top