SELECT * FROM ( SELECT RegionID, toDateTime(EventDate) AS date, count() AS quantity FROM test.hits GROUP BY RegionID, date ) AS regions ASOF LEFT JOIN ( SELECT RegionID, EventTime FROM test.hits ) AS ids ON (regions.RegionID = ids.RegionID) AND (regions.date < ids.EventTime) SELECT * FROM ( SELECT toStartOfDay(now()) + INTERVAL (seconds_since_start_of_day % 86000) SECOND AS date, fingerprint % 50 as fingerprint, multiIf(browserId % 3 == 0, 'firefox', browserId % 3 == 1, 'edge', 'chrome') as browser FROM generateRandom('seconds_since_start_of_day UInt32, fingerprint UInt8, browserId UInt8') LIMIT 100000 ) AS origins ASOF LEFT JOIN ( SELECT toStartOfDay(now()) + INTERVAL (seconds_since_start_of_day % 86000) SECOND AS date, fingerprint % 50 as fingerprint, multiIf(language % 2 == 0, 'es', 'en') as lang FROM generateRandom('seconds_since_start_of_day UInt32, fingerprint UInt8, language UInt8') LIMIT 5000000 ) AS visits ON (visits.fingerprint = origins.fingerprint AND visits.date >= origins.date) FORMAT Null num_rows 1000000 SELECT COUNT(*) AS count FROM ( SELECT number AS id, number AS visitor_id FROM system.numbers LIMIT {num_rows} ) AS sessions ASOF LEFT JOIN ( SELECT number AS visitor_id, number AS starting_session_id FROM system.numbers LIMIT {num_rows} ) AS visitors ON visitors.visitor_id = sessions.visitor_id AND visitors.starting_session_id < sessions.id