【发布时间】:2020-10-19 04:28:02
【问题描述】:
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 之前的 revisionDate 的 revisionId。在 claimId 'oo223' 的情况下,在 lossDate 之前最接近的 revisionDate 是 revisionId 'asdjb990n2'
这不起作用的情况如下:
假设我们购买了另一家保险公司。当我们收购他们的公司时,我们也会接受他们的索赔。在这种情况下,我们可能在任何 revisionId 存在之前就有一个 lossDate(如 revision id = 'asdjkn897')。
我需要一些表达方式:
对于每个 claimId,如果在 lossDate 之前有一个 revisionDate,则包括最接近 lossDate 之前的 revisionId,或者如果之前没有,则在 lossDate 之后包括最早的 revisionId。
因此,在 claimId = 'ioas992' 的情况下,因为 revisionid = 'asdjkn897' 的 revisionDate 为 2020-04-02 我想要该 revisionId ,因为它是丢失日期之后的最早修订(因为之前没有修订损失日期)。
编辑:抱歉,最后一行的丢失日期错误
我只想返回与每个声明 ID 的正确修订日期相关联的修订 ID。所以
claimID __revisionId
'oo223' - 'asdjb990n2'
'ioas992' - 'asdjkn897'
'oo2231' - 'sdjkn998'
【问题讨论】:
-
引用日期。 2020-04-02 = 2014. 什么 MYSQL 版本?一个像 MariaDB-10.2+ / MySQL-8.0+ 这样的窗口函数会有所帮助
-
请以表格形式提供所需的结果
-
对于不同行的同一索赔,您有不同的损失日期。因此,我不明白这个问题。
-
@GordonLinoff 抱歉已修复
标签: mysql sql date datetime mysql-workbench