Size: a a a

SqlCom.ru - Стиль жизни SQL

2021 January 28

Н

Никита in SqlCom.ru - Стиль жизни SQL
нет

сессия - набор событий , временной интервал между ними маленький , есть какое-то логическое завершение.

Простыми словами: магазин покупок , логируем 2 евента добавил в корзину и купил товары
user_id | time     |   event_name  
Дима    |  28.01. 12:00 |    добавил в корзину
Дима    |  28.01. 12:01 |    добавил в корзину
Дима    |  28.01. 12:02 |   купил товары
Закончил сессию , пошёл отдыхать
начал новую сессию
Дима    |  28.01. 17:00 |    добавил в корзину
Дима    |  28.01. 17:01 |    купил товары
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Никита
нет

сессия - набор событий , временной интервал между ними маленький , есть какое-то логическое завершение.

Простыми словами: магазин покупок , логируем 2 евента добавил в корзину и купил товары
user_id | time     |   event_name  
Дима    |  28.01. 12:00 |    добавил в корзину
Дима    |  28.01. 12:01 |    добавил в корзину
Дима    |  28.01. 12:02 |   купил товары
Закончил сессию , пошёл отдыхать
начал новую сессию
Дима    |  28.01. 17:00 |    добавил в корзину
Дима    |  28.01. 17:01 |    купил товары
Это уже не просто разница по времени между 2 событиями у одного пользователя, но и ещё и учёт последовательности этих событий, с возможными вариациями.
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Вопрос, если Дима открыл 2 вкладки. Сессия у него одна, а вот события которые он может делать могут не совпадать?
источник

Н

Никита in SqlCom.ru - Стиль жизни SQL
Dmitriy Ivanov
Вопрос, если Дима открыл 2 вкладки. Сессия у него одна, а вот события которые он может делать могут не совпадать?
Предполагается ,что вкладка может быть одна

Сессия называется новой ,если время между двумя последними евентами >= t
Где нам нужно это t  найти грубо говоря
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Никита
Предполагается ,что вкладка может быть одна

Сессия называется новой ,если время между двумя последними евентами >= t
Где нам нужно это t  найти грубо говоря
Ну ок. Просто я решал подобную задачу и это было не так однозначно, но дело ваше.
В вашем случае я бы использовал вариант с рекурсивной cte, если строк не много или через набор группировок во временные таблицы, если  строк много.
источник

Н

Никита in SqlCom.ru - Стиль жизни SQL
Dmitriy Ivanov
Ну ок. Просто я решал подобную задачу и это было не так однозначно, но дело ваше.
В вашем случае я бы использовал вариант с рекурсивной cte, если строк не много или через набор группировок во временные таблицы, если  строк много.
а можно подробнее про вашу задачу ? Мб я просто не понимаю некоторые моменты
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Никита
а можно подробнее про вашу задачу ? Мб я просто не понимаю некоторые моменты
Отчёт по пользователям, сколько времени он провел на каких страницах с затраченным таймингом действий на этих страницах.
Если проще, то выясняли юзабилити интерфейсов.
источник

Н

Никита in SqlCom.ru - Стиль жизни SQL
Dmitriy Ivanov
Отчёт по пользователям, сколько времени он провел на каких страницах с затраченным таймингом действий на этих страницах.
Если проще, то выясняли юзабилити интерфейсов.
Понял, ну , у меня игрушечный датасет. и в моём примере нет столбца с названием событий. Поэтому только такие догадки
источник

Н

Никита in SqlCom.ru - Стиль жизни SQL
Dmitriy Ivanov
Ну ок. Просто я решал подобную задачу и это было не так однозначно, но дело ваше.
В вашем случае я бы использовал вариант с рекурсивной cte, если строк не много или через набор группировок во временные таблицы, если  строк много.
можно ссылку на похожй пример для моей задачи, а то я не совсем понимаю ,как через рекурсию это сделать
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Никита
можно ссылку на похожй пример для моей задачи, а то я не совсем понимаю ,как через рекурсию это сделать
Пример рекурсии дат, подумайте как вам реализовать вашу задачу.

Declare  @FromDate    Date = '2014-04-21',
        @ToDate      Date = '2014-05-02'

;With DateCte (Date) As
(
   Select  @FromDate Union All
   Select  DateAdd(Day, 1, Date)
   From    DateCte
   Where   Date < @ToDate
)
Select  Date
From    DateCte
Option  (MaxRecursion 0)
источник

DL

Dmitry L in SqlCom.ru - Стиль жизни SQL
не подскажете, как в MS SQL  найти разность двух  последовательных полных (год указан) временных меток с  высокой точностью, если расстояние между ними меньше секунды. заранее спасибо!
источник

T

Timus in SqlCom.ru - Стиль жизни SQL
Dmitry L
не подскажете, как в MS SQL  найти разность двух  последовательных полных (год указан) временных меток с  высокой точностью, если расстояние между ними меньше секунды. заранее спасибо!
datediff? не?
источник

NP

Nick Proskuryakov in SqlCom.ru - Стиль жизни SQL
Dmitry L
не подскажете, как в MS SQL  найти разность двух  последовательных полных (год указан) временных меток с  высокой точностью, если расстояние между ними меньше секунды. заранее спасибо!
Datediff с нужным параметром точности времени
источник

KT

Konstantin Taranov in SqlCom.ru - Стиль жизни SQL
Dmitry L
не подскажете, как в MS SQL  найти разность двух  последовательных полных (год указан) временных меток с  высокой точностью, если расстояние между ними меньше секунды. заранее спасибо!
все зависит насколько точно, у DATEDIFF ограничение 10-9, но если даты хранятся в базе в формате datetime2, то у вас в любом случае ограничение 10-7 а фактически 10-6

если же данные приходят извне и вам нужна большая точность - переводите их в числа и отнимайте уже их
источник

DL

Dmitry L in SqlCom.ru - Стиль жизни SQL
спасибо и спасибо!
источник

А

Анна in SqlCom.ru - Стиль жизни SQL
Никита
можно ссылку на похожй пример для моей задачи, а то я не совсем понимаю ,как через рекурсию это сделать
Похожая задачка была  на stacloverflow, называлась "посчитать сессии пользователей sql", часть этой задачи и есть решение вашей
источник

Н

Никита in SqlCom.ru - Стиль жизни SQL
Анна
Похожая задачка была  на stacloverflow, называлась "посчитать сессии пользователей sql", часть этой задачи и есть решение вашей
Спасибо!
источник

DL

Dmitry L in SqlCom.ru - Стиль жизни SQL
Konstantin Taranov
все зависит насколько точно, у DATEDIFF ограничение 10-9, но если даты хранятся в базе в формате datetime2, то у вас в любом случае ограничение 10-7 а фактически 10-6

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

IZ

Ilia Zviagin in SqlCom.ru - Стиль жизни SQL
Анна
Похожая задачка была  на stacloverflow, называлась "посчитать сессии пользователей sql", часть этой задачи и есть решение вашей
Я хочу заменить, что это абсолютно идиотская задача для SQL
источник

А

Анна in SqlCom.ru - Стиль жизни SQL
Ilia Zviagin
Я хочу заменить, что это абсолютно идиотская задача для SQL
Почему?
источник