我有一个包含不同交易的多个记录的表,即
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
如果有人可以提供帮助,请提前致谢
答案 0 :(得分:3)
这样的事情......不太确定这些信息如何帮助你做任何事情....需要更多关于你想要平均日期的信息。
SELECT ID, REF, AVG(DATEPART(day, [Date]))
FROM dbo.Table1
GROUP BY ID, REF
答案 1 :(得分:3)
平均差异为SUM
差异除以COUNT(*)
SUM
差异实际上是MIN
和MAX
之间的差异:
SELECT id, ref, DATEDIFF(day, MIN(date), MAX(date)) / NULLIF(COUNT(*) - 1, 0)
FROM mytable
GROUP BY
id, ref
答案 2 :(得分:3)
使用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)
所以取(MAX - MIN)/(Count - 1)计数> 1