Presto SQL Count встречается в столбце массива и добавляет недостающие метки времени - PullRequest
0 голосов
/ 09 октября 2018

Мой оператор Presto SQL объединяет несколько строк, каждая из которых имеет дату и время, в одну строку с массивом этих дат (все остальные свойства одинаковы для этих строк).Таким образом, я получаю что-то вроде этого (есть произвольное количество столбцов, это упрощено):

id | timestamps
1    [ 2018-10-01 00:00:00.000, 2018-10-01 00:00:00.000, 2018-10-01 01:00:00.000, 2018-10-01 01:00:00.000, 2018-10-01 01:00:00.000]
2    [ 2018-10-01 00:00:00.000, 2018-10-01 01:00:00.000, 2018-10-01 01:00:00.000]

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

id | timestamps
1    [ { 2018-10-01 00:00:00.000 : 2}, { 2018-10-01 01:00:00.000 : 3}]
2    [ { 2018-10-01 00:00:00.000 : 1}, { 2018-10-01 01:00:00.000 : 2}] 

Затем, учитывая начало и конец, например, 2018-10-01 00: 00: 00.00 до 2018-10-01 02: 00: 00.00, заполните все пропущенныевременные метки со счетом 0

id | timestamps
1    [ { 2018-10-01 00:00:00.000 : 2}, { 2018-10-01 01:00:00.000 : 3}, { 2018-10-01 02:00:00.000 : 0}]
2    [ { 2018-10-01 00:00:00.000 : 1}, { 2018-10-01 01:00:00.000 : 2}, { 2018-10-01 02:00:00.000 : 0}] 

А затем я хочу указать процент, например 60%, и вычислить максимальный счетчик, который встречается по крайней мере так часто, и сохранить его в виде столбца для строки.Таким образом, это будет выглядеть так:

id   | timestamps                                                                                      | col3
1    [ { 2018-10-01 00:00:00.00 : 2}, { 2018-10-01 01:00:00.000 : 3}, { 2018-10-01 02:00:00.000 : 0}]   2
2    [ { 2018-10-01 00:00:00.000: 1}, { 2018-10-01 01:00:00.000 : 2}, { 2018-10-01 02:00:00.000 : 0}]   1

Для первой строки 3 происходит только в 33% случаев, а 2 - в 66% случаев (для счета 3 он включает счет 2,и счет 1), поэтому, учитывая порог 60%, число, которое я хочу захватить, равно 2. Во втором ряду 2 встречается только 33% времени, а 1 - 66% времени, поэтому числоперехват равен 1. Если в качестве порога для второй строки было указано 30%, я бы перехватил 2.

Возможны ли какие-либо из этих шагов в SQL?Если да, то какие функции / механизмы будут использоваться для выполнения этих шагов?

...