Вот мое решение с LEFT JOIN
.Я понимаю, что у вас есть большая таблица журналов, поэтому она может быть не самой лучшей.Я также добавил еще несколько записей для тестирования:
В основном я использую LEFT JOIN
для перемещения данных из столбцов в строки, чтобы можно было просто фильтровать с помощью WHERE
.
скрипта SQL:https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=9db538e59b3d265e4e8d8559762e79d4
WITH log_table AS (
SELECT *
FROM (VALUES (12345, 'app: iOS'),
(12345, 'app_version: 2018'),
(12346, 'app: Android'),
(12346, 'app_version: 2019'),
(12347, 'app: Windows'),
(12347, 'app_version: 2019'),
(12348, 'app: iOS'),
(12348, 'app_version: 2019'),
(12349, 'app: Android'),
(12349, 'app_version: 2018'),
(12350, 'app: Windows'),
(12350, 'app_version: 2018')
) v(user_id, action)
)
SELECT
L.user_id
FROM
log_table AS L
LEFT JOIN log_table AS L2
ON L.user_id = L2.user_id
WHERE (L.action LIKE '%iOS%' OR L.action LIKE '%Android%') AND L2.action LIKE '%2018%'
Результат: (выберите только те, у которых iOS или Android и версия 2018)
user_id
12345
12349