sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Encontrar brechas en grandes flujos de eventos?

Puede hacer esto con lag() función de ventana sobre una partición por el stream_id que está ordenado por la marca de tiempo. El lag() función le da acceso a filas anteriores en la partición; sin un valor de retraso, es la fila anterior. Entonces, si la partición en stream_id está ordenada por tiempo, entonces la fila anterior es el evento anterior para ese stream_id.

SELECT stream_id, lag(id) OVER pair AS start_id, id AS end_id,
       ("timestamp" - lag("timestamp") OVER pair) AS diff
FROM my_table
WHERE diff > interval '2 minutes'
WINDOW pair AS (PARTITION BY stream_id ORDER BY "timestamp");