Frage

Ich habe eine Tabelle mehrere Datensätze für unterschiedliche Transaktionen d.h enthalten.

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

, und ich suche die Daten zusammenzufassen, damit ich die durchschnittliche Anzahl Tage für jede ID und ref haben ... d.

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

Vielen Dank im Voraus, wenn jemand helfen kann

War es hilfreich?

Lösung

Durchschnittlicher Tag Unterschied ist ein SUM von Differenzen durch COUNT(*) geteilt

SUM die Unterschiede ist in der Tat Unterschied zwischen MIN und MAX:

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

Andere Tipps

So etwas ... nicht wirklich sicher, wie diese Informationen, die Sie mit allem, was allerdings helfen .... mehr Informationen benötigen, was Ihr versucht, die Tage zu mitteln.

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

Referenz: AVG , DATEPART

Mit SQL Server 2005 versuchen dies.

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

Haben Sie auch einen Blick auf sie mathematisch:

Lassen Sie uns sagen,

([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).

erweitern Sie den oberen Teil als

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

Whcih als -X Ende (0) + X (n)

so haben wir [X (n) - X (0)] / (n - 1)

so nehmen (MAX - MIN) / (Count - 1) für count> 1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top