MySQL рассчитывать на предварительное условие? - PullRequest
0 голосов
/ 17 сентября 2018

Рассмотрим схему ниже

id   user   tag    created
1    foo    tag1   2018-09-01
2    foo    tag2   2018-09-01
3    bar    tag1   2018-09-02
4    bar    tag2   2018-09-03
5    kkk    tag2   2018-09-05
6    qqq    tag1   2018-09-12

Как найти номер уникального пользователя, после которого после строки «tag1» в следующей строке этого пользователя следует «tag2»?

Ответ - 2 (foo, bar), на основе вышеуказанного запроса

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы можете использовать подзапрос, чтобы найти такие строки:

SELECT *
FROM yourdata AS t
WHERE tag = 'tag1'
AND EXISTS (
    SELECT 1
    FROM yourdata AS x
    WHERE x.user = t.user
    AND x.tag = 'tag2'
    AND (x.created > t.created OR x.id > t.id)
)
0 голосов
/ 17 сентября 2018

Вы можете использовать агрегацию для получения списка пользователей:

select user
from t
group by user
having min(case when tag = 'tag1' then created end) < max(case when tag = 'tag2' then created end);

Чтобы узнать количество таких пользователей, используйте подзапрос:

select count(*)
from (select user
      from t
      group by user
      having min(case when tag = 'tag1' then created end) < max(case when tag = 'tag2' then created end)
     ) u;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...