Ниже код преобразует ваши данные в список посещений сайта (id), за которым следует одна строка символов, представляющих посещенные страницы (например, "Abbbcd").
SELECT t2.id, max(tasks) as tasks from
(
SELECT t1.id,
(SELECT '' + Task FROM [Table] WHERE id = t1.id ORDER BY s_Id FOR XML PATH('')) AS tasks
from [Table] t1
) t2
group by t2.id
Так что проблема теперь сводится к поиску шаблона символов: а - любое число b's - с. Вы можете использовать LIKE для этого:
SELECT *
FROM (
SELECT t2.id, max(tasks) as tasks from
(
SELECT t1.id,
(SELECT '' + Task FROM [Table] WHERE id = t1.id ORDER BY s_Id FOR XML PATH('')) AS tasks
from [Table] t1
) t2
group by t2.id
) t3
WHERE t3.tasks LIKE '%abc%'
OR t3.tasks LIKE '%abbc%'
OR t3.tasks LIKE '%abbbc%'
OR t3.tasks LIKE '%abbbbc%';
Это немного грубо. Вы хотите сказать любое количество букв, но LIKE не поддерживает это. Для этого обычно используются регулярные выражения (RegEx). Выражение будет «ab + c», которое означает: «a», за которым следует 1 или более «b», а затем «c».
К сожалению, SQL-сервер не поддерживает регулярное выражение (Oracle), поэтому для его реализации необходимо использовать CLR. Другие сделали это за вас, поэтому вы можете следовать инструкциям здесь, чтобы установить его: https://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/
Это похоже на тестовый вопрос? Вы даже попытались создать собственный SQL? – Edper
Больше похоже на домашнее задание. –
Да, я попытался .. Но не смог продолжить, не зная, как соответствовать определенной последовательности записей. – Vicky