Setting the file. One moment.
Skill 103 · Querying PostHog Data
Subchapter 103.14
references/example-session-replay.mdMarkdown2 KBView on GitHub
SELECT
s.session_id,
any(s.team_id),
any(s.distinct_id),
min(s.min_first_timestamp) AS start_time,
max(s.max_last_timestamp) AS end_time,
dateDiff('SECOND', start_time, end_time) AS duration,
argMinMerge(s.first_url) AS first_url,
sum(s.click_count) AS click_count,
sum(s.keypress_count) AS keypress_count,
sum(s.mouse_activity_count) AS mouse_activity_count,
divide(sum(s.active_milliseconds), 1000) AS active_seconds,
greatest(minus(duration, active_seconds), 0) AS inactive_seconds,
sum(s.console_log_count) AS console_log_count,
sum(s.console_warn_count) AS console_warn_count,
sum(s.console_error_count) AS console_error_count,
max(s.retention_period_days) AS retention_period_days,
plus(dateTrunc('DAY', start_time), toIntervalDay(coalesce(retention_period_days, 30))) AS expiry_time,
date_diff('DAY', toDateTime('2026-09-24 12:03:14.523593'), expiry_time) AS recording_ttl,
greaterOrEquals(max(s._timestamp), toDateTime('2026-09-24 11:58:14.523173')) AS ongoing,
round(least(greatest(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum
coalesce(max(s.surfacing_score), 0.36) AS surfacing_score
FROM
raw_session_replay_events AS s
WHERE
and(greaterOrEquals(s.min_first_timestamp, toDateTime('2026-09-21 00:00:00.000000')), lessOrEquals(s.min_first_timestamp, toDateTime('2026-09-24 12:03:14.523316')))
GROUP BY
session_id
HAVING
and(greaterOrEquals(expiry_time, toDateTime('2026-09-24 12:03:14.523493')), equals(max(s.is_deleted), 0), greater(active_seconds, 5.0))
ORDER BY
start_time DESC,
session_id DESC
LIMIT 50000