MySQL条件日期查询

MySQL条件日期查询,mysql,sql,date,datetime,mysql-workbench,Mysql,Sql,Date,Datetime,Mysql Workbench,这是一个保险问题。我有索赔损失日期和保单修订日期。大多数情况下,在损失日期之前都会有修订。99%的时间我们希望包含修订日期最接近lossDate之前的修订ID。在索赔“oo223”的情况下,损失日期前最近的修订日期为修订ID“asdjb990n2” 这不起作用的情况如下: 比如说我们买了另一家保险公司。当我们收购他们的公司时,我们也接受他们的要求。在这种情况下,在任何修订id存在之前,我们可能有一个lossDate(如修订id='asdjkn897') 我需要一种说法: 对于每个索赔,如果在损失

这是一个保险问题。我有索赔损失日期和保单修订日期。大多数情况下,在损失日期之前都会有修订。99%的时间我们希望包含修订日期最接近lossDate之前的修订ID。在索赔“oo223”的情况下,损失日期前最近的修订日期为修订ID“asdjb990n2”

这不起作用的情况如下:

比如说我们买了另一家保险公司。当我们收购他们的公司时,我们也接受他们的要求。在这种情况下,在任何修订id存在之前,我们可能有一个lossDate(如修订id='asdjkn897')

我需要一种说法:

对于每个索赔,如果在损失日期之前有修订日期,则包括最接近损失日期之前的修订ID,或者如果在损失日期之前没有修订ID,则包括损失日期之后最早的修订ID

因此,在claimId='ioas992'的情况下,因为修订ID='asdjkn897'的修订日期为2020-04-02,我希望修订ID是损失日期之后最早的修订(因为在损失日期之前没有修订)

编辑:对不起,我最后一行的损失日期是错误的

我只想返回与每个索赔id的正确修订日期关联的修订id

claimID\uuuu修订ID

“oo223”-“asdjb990n2”

“ioas992”-“asdjkn897”


“oo2231”-“sdjkn998”

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

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)
选择t.claimid,
合并(最大值(修订日期损失日期然后修订日期结束时的情况)
)
来自测试t
按claimid分组;
基本上,这会查找丢失之前的最长修订日期。如果没有,则为该日期后的第一次

然后,可以连接回表以获取有关修订的更多信息


是Dfiddle。

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

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)
选择t.claimid,
合并(最大值(修订日期损失日期然后修订日期结束时的情况)
)
来自测试t
按claimid分组;
基本上,这会查找丢失之前的最长修订日期。如果没有,则为该日期后的第一次

然后,可以连接回表以获取有关修订的更多信息


是一把小提琴。

引用日期。2020-04-02 = 2014. 什么MYSQL版本?一个具有MariaDB-10.2+/MySQL-8.0+等窗口功能的应用程序将有助于以表格形式提供所需结果。对于同一索赔,不同行的损失日期不同。因此,我不明白这个问题。@GordonLinoff抱歉,我确定了日期。2020-04-02 = 2014. 什么MYSQL版本?一个具有MariaDB-10.2+/MySQL-8.0+等窗口功能的应用程序将有助于以表格形式提供所需结果。对于同一索赔,不同行的损失日期不同。因此,我不明白这个问题。@GordonLinoff抱歉修正