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_unique_sessions
1000
1000000
num_rows
1000000
SELECT COUNT(*) AS count
FROM
(
SELECT
(number % {num_unique_sessions}) AS visitor_id,
number AS id
FROM system.numbers
LIMIT {num_rows}
) AS sessions
ASOF LEFT JOIN
(
SELECT
(number % {num_unique_sessions}) 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