0

datetime 列を持つ SQL Server 2005 データベース テーブルがあります。サービスが着信要求を処理するたびに、このテーブルにエントリを書き込みます。

私が取得したいのは、連続したエントリ間の時間範囲の内訳です。

データが次の場合:

2009-10-30 04:06:57.117
2009-10-30 03:52:44.383
2009-10-30 03:42:00.990
2009-10-30 03:41:59.160
2009-10-30 03:17:07.563

をお願いします:

< 10 minutes: 1
10 - 20 minutes: 2
20 - 30 minutes: 1

ブレークダウン グループは重要ではありません。エントリ間の長さを感じたいだけです。実際、私が最終的にこれを使用する目的は、エントリの 99% が少なくとも別のエントリに近い期間を決定することです。

どうもありがとう、ジェームズ

4

1 に答える 1

1

次のようなテーブルを使用します。

CREATE TABLE dbo.foo(bar DATETIME);

それから多分これ:

WITH t AS
(
  SELECT bar, rn = ROW_NUMBER() OVER (ORDER BY bar)
  FROM dbo.foo
),
x AS
(
  SELECT d = DATEDIFF(MINUTE, t1.bar, t2.bar)
  FROM t AS t1
  INNER JOIN t AS t2
  ON t1.rn = t2.rn - 1
),
y AS
(
  SELECT blat = CASE WHEN d < 10 THEN '< 10 '
    WHEN d BETWEEN 10 AND 20 THEN '10 - 20 '
    WHEN d BETWEEN 20 AND 30 THEN '20 - 30 '
    ELSE '> 30 ' END + ' minutes:'
  FROM x
)
SELECT blat, COUNT(*) FROM y GROUP BY blat;

明らかに少ない CTE でそれを行うことができますが、私は必要な回数だけ計算を書き出すだけでよいことを好みます...

于 2009-10-30T12:35:23.953 に答える