Как создать таблицу времени SQL в местоположении из потока данных SQL Location / Timestamp - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть вопрос, с которым я борюсь в SQL.

В настоящее время у меня есть ряд данных о местоположении и времени.Он состоит из устройств, расположенных в разных точках времени.Местоположения повторяются, поэтому, пока они имеют координаты широта / долгота, есть несколько повторяющихся.Временная метка появляется с нерегулярными интервалами (иногда несколько раз в секунду, иногда ничего в течение 30 секунд).Например, посмотрите представленные ниже данные (я сортирую по имени устройства в этом примере, но могу упорядочить по любому, если это поможет):

Device     Location     Timestamp
X          A            1
X          A            1.7
X          A            2
X          A            3
X          B            4
X          B            5.2
X          B            6
X          A            7
X          A            8
Y          A            2
Y          A            4
Y          C            6
Y          C            7

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

Device     Location     EntryTime     ExitTime     Duration
X          A            1             3            2
X          B            4             6            2
X          A            7             8            1
Y          A            2             4            2
Y          C            6             7            1

Отсюда я мог бы обработать его дальше, например, для определения общего времени нахождения на определенный день.

Это то, что я мог бы сделать в Python или некоторых другихдругой язык с чем-то вроде цикла while, но я действительно не уверен, как это сделать в SQL.Вероятно, стоит отметить, что это в Azure SQL, и я создаю эту таблицу с помощью запроса Stream Analytics для экземпляра концентраторов событий.Причина, по которой я не хочу просто суммировать все в местоположении, заключается в том, что он будет передавать данные и пролистывать их для отображения, скажем, последних 24 часов.

Любые подсказки, советы или рекомендациио том, как я мог бы сделать это, будет принята с благодарностью.Я искал и не смог найти то, что искал - я вижу такие вещи, как datediff для расчета длительности между двумя временными метками или max и min для нахождения первой и последней дат, но ни одна из них, похоже, не совсемпоставьте галочку.Проблема, с которой я столкнулся, заключается в том, что устройства перемещаются и возвращаются в одно и то же место много раз в течение периода.Например, если взять первое вхождение / временную метку устройства X в местоположении A и вычесть его из последнего, не учитываются другие местоположения, к которым оно могло перемещаться между этими временными метками.Ситуация усложняется, временные метки нерегулярны, поэтому я не могу просто подсчитать количество вхождений для каждого местоположения и сложить их либо.

Может быть, я упускаю что-то простое или очевидное, но это заставило менятупик!Помощь будет принята с благодарностью:)

1 Ответ

0 голосов
/ 19 сентября 2019

Я считаю, что группировка будет работать

SELECT Device, Location, [EntryTime] = MIN(Timestamp), [ExitTime] = Max(Timestamp), [Duration] = MAX(Timestamp)- MIN(Timestamp)
FROM <table>
GROUP BY Device, Location
...