mysql条件日期查询

rt4zxlrg  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(383)
CREATE TABLE test (
revisionId char primary key,
claimId char,
revisionDate datetime,
lossDate datetime
);

INSERT INTO test (id, claimId, revisionDate, lossDate)
VALUES
('asdjb990n','oo223',2020-01-01 10:30:00,2020-01-30 12:30:00)
('asdjb990n2','oo223',2020-01-02 10:30:00,2020-01-30 12:30:00)

('asdjkn897','ioas992', 2020-04-02 11:30:00,2020-04-01 10:30:00)
('asdjkn123','ioas992', 2020-04-03 11:30:00,2020-04-01 10:30:00)

('sdnjkn998','oo2231', 2020-02-02 12:31:00,2020-02-15 11:00:00)

这是一个保险问题。我有索赔日期和保单修改日期。大多数情况下,在损失日期之前有一次修订。99%的时间我们希望包含修订日期最接近lossdate之前的修订ID。在索赔'oo223'的情况下,损失日期前最接近的修订日期是修订ID'asdjb990n2'
不起作用的情况如下:
假设我们买了另一家保险公司。当我们收购他们的公司时,我们也接受他们的要求。在这种情况下,在任何修订id存在之前,我们可能有一个lossdate(如修订id='asdjkn897')。
我需要一个说法:
对于每个索赔,如果在损失日期之前有修订日期,则包括最接近损失日期之前的修订ID,或者如果之前没有修订ID,则包括损失日期之后最早的修订ID。
因此,在claimid='ioas992'的情况下,因为revisionid='asdjkn897'的修订日期是2020-04-02,我希望该修订id是损失日期之后最早的修订(因为在损失日期之前没有修订)。
编辑:对不起,最后一行的损失日期不对
我只想返回与每个索赔id的正确修订日期相关联的修订id
claimid\uu修订ID
'oo223'-'asdjb990n2'
“ioas992”-“asdjkn897”
'oo2231'-'sdjkn998'

suzh9iv8

suzh9iv81#

假设索赔的所有行上的损失日期一致,则可以使用聚合:

select t.claimid,
       coalesce(max(case when revisionDate < lossdate then revisionDate end),
                min(case when revisionDate > lossdate then revisionDate end)
                )
from test t
group by claimid;

基本上,这将查找丢失前的最大修订日期。如果没有,那就在那一天之后第一次。
然后可以重新联接到表以获取有关修订的更多信息。
这是一把小提琴。

相关问题