SQL Сервер 18 - слияние дат около полуночи - PullRequest
0 голосов
/ 06 января 2020

Я хотел бы спросить, может ли кто-нибудь помочь мне с этим. У меня есть таблица с пользователем traffi c на сайтах. Важным столбцом является отметка времени, которая выглядит следующим образом.

|        Timestamp          |
|  2017-06-26 23:52:09.000  |
|  2017-06-26 23:52:22.000  |
|  2017-06-26 23:58:13.000  |
|  2017-06-26 23:52:59.000  |
|  2017-06-27 00:02:35.000  |

Метки времени используются для расчета сессий. Час или около того в метках времени означает один сеанс. Проблема состоит в том, что расчетный сеанс отличается, когда активность на веб-сайтах была сделана после полуночи. Таким образом, в приведенном ниже примере выполняется два сеанса, а не один.

 |  2017-06-26 23:52:59.000  |
 |  2017-06-27 00:02:35.000  |

Мне нужно найти и объединить или каким-либо образом соединить одну метку времени (после полуночи) с другими (после полуночи). Спасибо за любой совет. Я уже некоторое время пытаюсь, но не могу добиться никакого прогресса.

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Если я правильно понимаю, вы хотите назначать сеансы на основе промежутка часа в метках времени.

Это легко сделать с помощью оконных функций:

select t.*,
       sum(case when timestamp < dateadd(hour, 1, prev_timestamp) then 0
                else 1
           end) over (partition by user_id order by timestamp) as session_number
from (select t.*, lag(timestamp) over (partition by user_id order by timestamp) as prev_timestamp
      from t
     ) t;

Я предполагаю о существовании идентификатора пользователя и о том, что вы хотите сделать это для пользователя .

0 голосов
/ 06 января 2020

Не могли бы вы использовать (LEAD (Timestamp) OVER (PARTITION BY ORDER BY Timestamp) - Timestamp)?

...