Запрос T-SQL (анализ последовательных строк в таблице на основе определенных критериев) - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть следующая таблица в базе данных SQL Server 2016:

      Time                  Identifier  Category
1.    2821-01-04 17:41.0    1002        A1001
2.    2821-01-05 17:41.0    1002        A1001
3.    2821-01-06 17:42.0    1001        A1001
4.    2821-01-07 17:44.0    1002        A1001
5.    2821-01-08 17:44.0    1002        A1001
6.    2821-01-09 17:44.0    1002        A1001
7.    2821-01-10 17:44.0    1002        A1001
8.    2821-01-11 17:44.0    1002        A1001
9.    2821-01-12 17:44.0    1002        A1001
10.   2821-01-13 17:44.0    1002        A1001
11.   2821-01-14 17:45.0    1001        A1001
12.   2821-01-15 17:46.0    1002        A1001
13.   2821-01-16 17:46.0    1002        A1001
14.   2821-01-17 17:46.0    1002        A1001
15.   2821-01-18 17:46.0    1002        A1001
16.   2821-01-19 17:46.0    1002        A1001
17.   2821-01-20 17:46.0    1002        B1001
18.   2821-01-21 17:46.0    1002        B1001
19.   2821-01-22 17:46.0    1002        B1001
20.   2821-01-23 17:46.0    1001        B1001
21.   2821-01-24 17:48.0    1002        B1001
22.   2821-01-25 17:48.0    1002        B1001
23.   2821-01-26 17:48.0    1002        B1001
24.   2821-01-27 17:48.0    1002        B1001
25.   2821-01-28 17:48.0    1001        B1001
26.   2821-01-29 17:52.0    1002        B1001
27.   2821-01-30 17:52.0    1002        B1001
28.   2821-01-31 17:52.0    1002        B1001
29.   2821-02-01 17:52.0    1002        B1001

Мне нужен SQL-запрос, который получает разницу во времени между любыми 2 последовательными строками, сначала[Идентификатор] = 1001, а второе - [Идентификатор] = 1002 для каждой [Категории] (т. Е. Расчет должен выполняться только для одной и той же категории).Последовательные пары записей, которые следует рассмотреть: записи [3,4] и [11,12] и [20,21] и [25,26].Первый [идентификатор] равен 1001, а последовательный [идентификатор] равен 1002. Рассмотрим это как пару.Поэтому нам нужно сначала идентифицировать эти пары.Уместны только пары из одной и той же категории.Пары, принадлежащие к разным категориям, следует игнорировать.

Мне нужно знать, сколько раз разница между этими парами составляет 1 с, 2 с, 2 с .... до 5 секунд.

Желаемый выход:

Num of seconds  Category    Count
1               A1001       1
2               A1001       1
3               A1001       0
4               A1001       0
5               A1001       0
1               B1001       0
2               B1001       1
3               B1001       0
4               B1001       1
5               B1001       0

1 Ответ

0 голосов
/ 28 сентября 2018

Я верю, что что-то вроде следующего приведет вас в стадион.

SELECT *
FROM
    (
        SELECT 
            [time],
            [identifier],
            [category],
            CASE WHEN identifier = 1001 THEN DATEDIFF(SECOND, [time], LEAD([time]) OVER (PARTITION BY Category ORDER BY [time], identifier)) END as TimeDiff
        FROM yourtable
    )timesub
WHERE identifier = 1001
ORDER BY category, TimeDiff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...