2

だから私はこのようなデータを持っています:

UserID  CreateDate
1       10/20/2013 4:05
1       10/20/2013 4:10
1       10/21/2013 5:10
2       10/20/2012 4:03

CreateDates 間の平均時間をユーザーごとにグループ化する必要があります。私の望ましい結果は次のようになります。

UserID  AvgTime(minutes)
1       753.5
2       0

ユーザー グループに対して返されるすべてのレコードの CreateDates の違いを見つけるにはどうすればよいですか?

編集:

SQL Server 2012 の使用

4

6 に答える 6

6

これを試して:

SELECT  A.UserID,
        AVG(CAST(DATEDIFF(MINUTE,B.CreateDate,A.CreateDate) AS FLOAT)) AvgTime
FROM #YourTable A
OUTER APPLY (SELECT TOP 1 *
             FROM #YourTable
             WHERE UserID = A.UserID
             AND CreateDate < A.CreateDate
             ORDER BY CreateDate DESC) B
GROUP BY A.UserID
于 2013-10-21T18:31:09.670 に答える
2

このアプローチも機能するはずです。

フィドルのデモはこちら

;WITH CTE AS (
    Select userId, createDate, 
           row_number() over (partition by userid order by createdate) rn
    from Table1
)
select t1.userid, 
       isnull(avg(datediff(second, t1.createdate, t2.createdate)*1.0/60),0) AvgTime
from CTE t1 left join CTE t2 on t1.UserID = t2.UserID and t1.rn +1 = t2.rn
group by t1.UserID;

更新:指摘してくれた@Lemarkに感謝number of diff = recordCount - 1

于 2013-10-21T18:31:17.557 に答える
0

これは 2012 年にのみ機能します。LEAD分析関数を使用できます。

CREATE TABLE dates (
  id integer,
  created datetime not null
);

INSERT INTO dates (id, created)
SELECT 1 AS id, '10/20/2013 4:05' AS created
UNION ALL SELECT 1, '10/20/2013 4:10'
UNION ALL SELECT 1, '10/21/2013 5:10'
UNION ALL SELECT 2, '10/20/2012 4:03';

SELECT id, isnull(avg(diff), 0)
FROM (
  SELECT id,
    datediff(MINUTE,
             created,
             LEAD(created, 1, NULL) OVER(partition BY id ORDER BY created)
             ) AS diff
  FROM dates
) as diffs
GROUP BY id;

http://sqlfiddle.com/#!6/4ce89/22

于 2013-10-21T18:48:56.300 に答える
0

このようなもの:

;WITH CTE AS
(
   SELECT
      ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY CreateDate) RN,
      UserID,
      CreateDate
   FROM Tbl
)
SELECT
  T1.UserID,
  AVG(DATEDIFF(mi, ISNULL(T2.CreateDate, T1.CreateDate), T1.CreateDate)) AvgTime
FROM CTE T1
  LEFT JOIN CTE T2
    ON T1.UserID = T2.UserID
      AND T1.RN = T2.RN - 1
GROUP BY T1.UserID
于 2013-10-21T18:24:54.027 に答える