session.sql 488 B

123456789101112131415161718192021
  1. /* syntax version 1 */
  2. /* postgres can not */
  3. USE plato;
  4. -- add non-optional partition key
  5. $src = SELECT t.*, user ?? "u0" as user_nonopt FROM Input as t;
  6. SELECT
  7. user,
  8. user_nonopt,
  9. ts,
  10. payload,
  11. AGGREGATE_LIST(TableRow()) over w as full_session,
  12. COUNT(1) over w as session_len,
  13. FROM $src
  14. WINDOW w AS (
  15. PARTITION BY user, user_nonopt, SessionWindow(ts, 10)
  16. ORDER BY ts
  17. ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
  18. )
  19. ORDER BY user, payload;