Как я могу получить строки до некоторого условия для нескольких групп
Пожалуйста, смотрите ниже my_table в настоящее время примененный порядок по (1) fk_user_id в порядке возрастания (2) create_date в порядке убывания
Я используя postgresql и пружинную загрузку jpa, jpql.
1) Найдите запрос для создания таблицы и вставьте данные, как показано ниже
Создание и вставка операторов:
CREATE TABLE public.my_table
(
id bigint,
condition boolean,
fk_user_id bigint,
created_date date
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.my_table
OWNER TO postgres;
INSERT INTO public.my_table(
id, condition, fk_user_id, created_date)
VALUES
(137, FALSE, 23, '2019-08-28'),
(107, FALSE, 23, '2019-05-13'),
(83, TRUE, 23, '2019-04-28'),
(78, FALSE, 23, '2019-04-07'),
(67, TRUE, 23, '2019-03-18'),
(32, FALSE, 23, '2019-01-19'),
(181, FALSE, 57, '2019-11-04'),
(158, TRUE, 57, '2019-09-27'),
(146, FALSE, 57, '2019-09-16'),
(125, FALSE, 57, '2019-07-24'),
(378, TRUE, 71, '2020-02-16'),
(228, TRUE, 71, '2019-12-13'),
(179, FALSE, 71, '2019-10-06'),
(130, FALSE, 71, '2019-08-19'),
(114, TRUE, 71, '2019-06-29'),
(593, FALSE, 92, '2020-03-02'),
(320, FALSE, 92, '2020-01-30'),
(187, FALSE, 92, '2019-11-23'),
(180, TRUE, 92, '2019-10-17'),
(124, FALSE, 92, '2019-08-05');
Я хотел бы получить все строки, которые имеют ВСЕ последнее условие ЛОЖЬ, до последней ИСТИНЫ, найденной , а затем пропустить другие строки для этого пользователя.
Например,
1) Идентификатор пользователя = 23 - первые 2 строки с идентификатором (137, 107) будут выбраны, как и в 2019-04-28, для них будет выполнено условие ИСТИНА, поэтому пропустить другие строки
2) Идентификатор пользователя = 57 - только 1 строка с идентификатором (181)
3) Идентификатор пользователя = 71 - Строки не будут выбраны, так как имеет последнее условие ИСТИНА
аналогично, мои строки результатов должны быть такими, как показано ниже.
Я могу найти строки только для 1 пользователь с запросом ниже
select * from user_condition where
fk_user_id = 23 and created_date > (select max(created_date) from user_condition where fk_user_id = 23 and condition like 'TRUE' group by fk_user_id);
Но я хочу строки для всех fk_user_id