如果有其他类型的行,则排除该行;如果没有其他类型的行,则保留原始行

mrwjdhj3  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(482)

我在进行sql查询时遇到了一些问题,无法排除某些重复的行,但原始行的另一种类型数据如下所示。

id uuid type
73 7ddb charge
75 b93d charge
76 b93d cancellation

我只需要有这个数据,不包括费用行的情况下,它存在取消行。

id uuid type
73 7ddb charge
76 b93d cancellation

谢谢你的帮助!

vwoqyblh

vwoqyblh1#

如果我理解正确,您可以使用:

select t.*
from t
where t.type = 'cancellation' or
      not exists (select 1
                  from t t2
                  where t2.uuid = t.uuid and t2.type = 'cancellation'
                 );

这将返回 uuid 那些有 'cancellation' . 它还返回 uuid 如果没有这样的争吵。
注意:这假设您只有两种类型——您的问题中提到的两种类型。

jjjwad0x

jjjwad0x2#

您可以在此处使用exists逻辑:

SELECT t1.*
FROM yourTable t1
WHERE NOT EXISTS (SELECT 1 FROM yourTable t2
                  WHERE t2.uuid = t1.uuid AND t2.type = t1.type AND t2.id > t1.id);

这将为每个 uuid 这样就找不到与此相同的最新记录 uuid ,如果出现重复。这里是最近的记录 uuid 是最伟大的 id 价值观。

相关问题