【问题标题】:MySQL conditional date queryMySQL条件日期查询
【发布时间】: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


【解决方案1】:

假设索赔的所有行的损失日期都是一致的,那么您可以使用聚合:

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;

基本上,这会查找丢失之前的最大修订日期。如果没有,则在该日期之后的第一个。

然后您可以重新加入表格以获取有关修订的更多信息。

Here 是一个 dbfiddle。

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 2012-06-24
    • 2011-07-01
    • 2011-04-23
    • 2014-01-07
    • 2011-01-01
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多