Скажем, у меня есть таблица activities
с полями starttime (TIMESTAMP)
и stoptime (TIMESTAMP)
. Я хочу найти момент, в течение которого происходит большинство действий. Запрос должен вернуться в первый такой момент.Google BigQuery - самый активный момент на основе временного интервала
Я попытался получить все отметки времени starttime
, а затем для каждого из них подсчитайте количество действий, которые происходят в этот момент. Затем найти максимум:
#standardSQL
SELECT
time,
(
SELECT COUNT(*)
FROM activities
WHERE starttime <= time AND time <= stoptime
) AS cnt
FROM (
SELECT DISTINCT starttime AS time
FROM activities
ORDER BY time
)
ORDER BY cnt DESC, time ASC
LIMIT 1
К сожалению, он говорит: LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.
Я думаю, что правильный алгоритм для этой внешней базы данных мира было бы получить все starttimes
и stoptimes
поместить их в массив таким образом, что они будет отличаться, сортировать его, а затем последовательно следовать этим массивом в поисках максимального момента. Однако я понятия не имею, как выразить такой алгоритм в SQL.
Я видел this, но я не думаю, что это помогает.
что зернистость ваш момент - это второй , минуту или час или что-то еще? –
@MikhailBerlyant Я думаю, что это миллисекунды. –
, так что вам нужно найти, на какой ровно миллисекунду в течение общего периода времени вы получили большинство действий? пожалуйста, подтвердите, так как это звучит непрактично для большинства случаев использования, но у вас может быть специальный случай –