我如何获取多组ID达到某些条件的行

问题描述 投票:0回答:1

如何获取行,直到多个组达到某种条件

请参考以下my_table当前应用的订单,(1)fk_user_id升序(2)created_date降序

我正在使用postgresql和spring boot 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');

my_table

我想获取所有具有所有最新的假条件直到找到最后一个TRUE的行,然后为该用户跳过其他行。

例如,

1)用户ID = 23-ID为(137,107)的前2行将在2019-04-28处获取,它具有TRUE条件,因此,将跳过其他行

2)用户ID = 57-ID为(181)的只有1行

3)用户ID = 71-由于具有最新的TRUE条件,因此不会获取任何行

同样,我的结果行应如下所示。

enter image description here

我只能通过以下查询找到仅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的行

postgresql jpa jpql
1个回答
1
投票
SELECT t1.* FROM sourcetable t1 WHERE t1.condition = 'FALSE' AND NOT EXISTS ( SELECT NULL FROM sourcetable t2 WHERE t1.fk_user_id = t2.fk_user_id AND t1.created_date < t2.created_date /* or <= */ AND t2.condition = 'TRUE' )
© www.soinside.com 2019 - 2024. All rights reserved.