Итак, у меня есть набор данных, который включает столбец дат и столбец идентификатора. Вот пример данных даты:
5/30/10 12:00 AM
5/30/10 12:01 AM
5/30/10 1:59 AM
5/30/10 1:59 AM
5/30/10 3:58 AM
5/30/10 3:58 AM
5/30/10 5:57 AM
5/30/10 6:57 AM
5/30/10 7:56 AM
5/30/10 7:56 AM
5/30/10 9:55 AM
5/30/10 11:54 AM
То, что я хотел бы сделать, это создать сегменты для этих строк на основе параметра типа «2 часа».
Эти двухчасовые окна начинаются с самой ранней даты в наборе данных, но переходят к следующему времени запуска, когда вы просматриваете список. Например, ожидаемый вывод «buckets» для моего списка будет:
5/30/10 12:00 AM 1
5/30/10 12:01 AM 1
5/30/10 1:59 AM 1
5/30/10 1:59 AM 1
5/30/10 3:58 AM 2
5/30/10 3:58 AM 2
5/30/10 5:57 AM 2
5/30/10 6:57 AM 3
5/30/10 7:56 AM 3
5/30/10 7:56 AM 3
5/30/10 8:55 AM 3
5/30/10 11:54 AM 4
Итак, вы можете видеть, что когда я добираюсь до 3:58, он во 2-й группе, потому что это более 2 часов после 12:00. Однако 5:57 утра все еще во 2-й группе, хотя прошло более 4 часов после 12:00, потому что базовое время 2-й группы - 3:58, а не 2:00.
Я попытался создать столбец группировки с помощью функции разделения, подобной этой:
FLOOR(DATEDIFF(SECOND, t.BaseCreateDate, t.CreateDate) / t.DedupWindow)
Где BaseCreateDate - самая ранняя дата в моем наборе, CreateDate - данные, которые я перечислил, а DedupWindow - 2 часа. Однако, это дает мне фиксированные 2-часовые окна, и я не могу найти математику, которая сбрасывает базу по мере необходимости через данные.
У меня это работает в курсоре, но по нескольким причинам я хотел бы получить его на основе рабочего набора.