Below is attempt to "save" your original idea of using GROUP_CONCAT with later REGEX_MATCH
Try below
#legacySQL
SELECT
date,
totals.visits AS totalvisits,
GROUP_CONCAT(hits.page.hostname, ">>") WITHIN RECORD AS sequence
FROM TABLE_DATE_RANGE([MySys:110909631.ga_sessions_],
DATE_ADD(CURRENT_TIMESTAMP(), -90, 'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(), -1, 'DAY'))
HAVING REGEXP_MATCH(CONCAT('>>', sequence, '>>'), '>>(DesiredHost>>)+')
AND NOT REGEXP_MATCH(CONCAT('>>', sequence, '>>'), '>>(RejectHost>>)+(DesiredHost>>)+')
Above looks for visits with DesiredHost
in hits.page.hostname
REGEXP_MATCH(CONCAT('>>', sequence, '>>'), '>>(DesiredHost>>)+')
but excludes those visits where DesiredHost
is preceeded with RejectHost
REGEXP_MATCH(CONCAT('>>', sequence, '>>'), '>>(RejectHost>>)+(DesiredHost>>)+')
As you can see in both expressions above - you can fine tune length of visit within host or set any other more complex logic to look for. Hope you get an idea.
And hope you can get your initial idea back to work!