Разбивка временного промежутка между списком Datetime - PullRequest
0 голосов
/ 30 октября 2009

У меня есть таблица базы данных SQL Server 2005, в которой есть столбец datetime. Я записываю запись в эту таблицу каждый раз, когда служба обрабатывает входящий запрос.

То, что я хотел бы получить, это разбивка промежутков времени между последовательными записями.

Если данные:

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% записей, по крайней мере, так же близко к другому, как.

Большое спасибо, Джеймс

1 Ответ

1 голос
/ 30 октября 2009

С такой таблицей:

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, но я предпочитаю только выписывать вычисления столько раз, сколько мне нужно ...

...