3

コメントするまでの平均時間を計算する SQL クエリを探しています (毎月測定)。

元の投稿日時とコメント日時の間の平均時間を測定するクエリを作成できましたが、ほとんどの場合関連しているため、現在のコメントと前のコメントの間の時間を測定する必要があるため、これは正しくありません.


select 
  dateadd(month, datediff(month, 0, Comments.creationdate),0) [Date],
  AVG(CAST(DATEDIFF(hour, Posts.CreationDate, Comments.creationdate ) AS BigInt)) [DelayHours]
  from comments
    INNER JOIN posts ON Comments.PostId = Posts.Id
  GROUP BY
    dateadd(month, datediff(month, 0, Comments.creationdate),0)
  ORDER BY Date
4

1 に答える 1

1

私はこのようなものがうまくいくはずだと思います。申し訳ありませんが、現時点ではテストできません。誤植した場合はお詫び申し上げます。

WITH cte1 AS
(
SELECT c.PostId, c.creationdate, 
ROW_NUMBER() OVER (PARTITION BY c.PostId ORDER BY c.creationdate) AS rn
FROM comments c
)
SELECT dateadd(month, datediff(month, 0, a.creationdate),0) [Date],
AVG(diff_hr) AS avg_diff
FROM 
(
  SELECT a1.PostId, a1.creationdate,
  CASE
   WHEN a1.rn = 1 THEN 
    CAST(DATEDIFF(hour,p.creationdate,a1.creationdate) AS BIGINT) 
   ELSE
    CAST(DATEDIFF(hour,a2.creationdate,a1.creationdate) AS BIGINT) 
  END AS diff_hr
  FROM cte1 a1
  INNER JOIN posts p ON (p.Id = a1.PostId)
  LEFT JOIN cte1 a2 ON (a2.PostId = a1.PostId AND a2.rn = a1.rn-1)
)a
GROUP BY dateadd(month, datediff(month, 0, a.creationdate),0)

SQLServer 2012の更新LAGにより、ソリューションが簡素化されます...バージョンに関するコメントが遅すぎることに気付きました。

アップデート2のミスプリントが修正されました(FROM句が欠落していて、テーブル定義に一致するようにp.PostId変更されました)p.Id

于 2013-01-19T15:33:15.053 に答える