Если Дата существует, тогда покажите следующую дату - PullRequest
0 голосов
/ 07 мая 2018

У меня есть таблица, в которой есть все даты, когда происходят события, но я просто хочу показать следующее событие, которое произошло, если дата существует в другой таблице.

Вот моя логика - у меня есть две таблицы:

table_1

userid     date          event
01         2018-01-01    A
01         2018-01-02    A
02         2018-01-01    A
03         2018-01-01    B

table_2

userid     date
01         2018-01-01
02         NULL

Что у меня так далеко:

SELECT t1.userid, t1.date
FROM table_1 as t1
LEFT JOIN table_2 as t2 ON t1.userid = t2.userid
WHERE 1.event = 'A'

По сути, я хочу выяснить, если table_2.date is not null, тогда показать table_1.date, где table_1.date > table_2.date

Результат должен выглядеть следующим образом:

userid     date
01         2018-01-02

Поскольку идентификатор пользователя 01 имеет значение даты в таблице_2, я получил дату, которая больше даты в таблице_2.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Давайте перейдем к коррелированному подзапросу:

select t2.*,
       (select top (1) t1.date
        from table1 t1
        where t1.userid = t2.userid and t1.event = 'A' and t1.date > t2.date
        order by t2.date desc
       ) t1_date
from table2 t2
where t2.date is not null;
0 голосов
/ 07 мая 2018

Вы можете использовать exists:

select t1.*
from table_1 t1
where event = 'A' and
      exists (select 1 
              from table_2 t2
              where t2.userid = t1.userid and 
                    (t2.date is not null and t1.date > t2.date));

Однако, фильтр is not null здесь избыточен, вы можете упростить его непосредственно как

where event = 'A' and
      exists (select 1 from table_2 t2 
                       where t2.userid = t1.userid and t1.date > t2.date);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...