2009-10-30 4 views
0

У меня есть таблица базы данных SQL Server 2005, которая имеет столбец datetime. Я пишу запись в этой таблице каждый раз, когда служба обрабатывает входящий запрос.Распределение временных промежутков между списком 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

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

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; 

Вы можете сделать это с меньшим количеством КТР, очевидно, но я предпочитаю только должны выписывать расчеты как несколько раз, как я должен ...

Смежные вопросы