@AKLZephyr

Как сделать выборку по интервалу и условию?

Есть таблица events поля:
id, operation_id, type, date

1, 100, open, 2021-02-03 07:36:55
2, 100, open_page_1, 2021-02-03 07:36:55
3, 100, close_page_1, 2021-02-03 07:36:56
4, 200, open, 2021-02-03 07:36:55
5, 200, open_page_2, 2021-02-03 07:36:55

Нужно взять все поля за последний час и только те у которых есть типы open, open_page_1 и никаких других ивентов у данной operation_id нет
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Пользуйтесь на здоровье:
select * 
from events
where 
	date > current_timestamp - interval '1 hour'
	and type in ('open', 'open_page_1')
	and not exists (
		select type from events e 
	  	where e.operation_id = events.operation_id
	  		and type not in ('open', 'open_page_1')
	)
;


Share SQL code
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Fallenyasha
Про фильтрацию по типам
select operation_id 
from <table>
group by operation_id 
having sum(case when type in ('open', 'open_page_1') then 1 else 3 end) = 2
Ответ написан
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы