MySQL -查找具有相同值的连续行块的开始和结束

  • 本文关键字:连续 开始 结束 查找 MySQL mysql
  • 更新时间 :
  • 英文 :


我需要将值从一个表提取并迁移到另一个表。源表包含特定生效日期的汇总值。如果一个值被改变了,如果组件值被改变了,那么在这个生效日期开始的数据有效,将会写一行。

tbody> <<tr>125
source_id entity_id effecve_date component_1 component_2 component_3
int (ai)int日期intintint
1592020-01-01100090
1592020-05-011405090
31592020-08-0103090
1592020-12-0103050

component_final中不需要enddate列,因为它的值取决于同一表中的其他值:

SELECT
id,
source_id,
entity_id,
startdate,
(  SELECT DATE_ADD(MIN(cf2.startdate),INTERVAL -1 DAY) 
FROM component_final cf2 
WHERE cf2.startdate > cf1.startdate
AND cf2.source_id = cf1.source_id
AND cf2.entity_id = cf1.entity_id
) as enddate,
component_type,
value
FROM component_final cf1;

我理解核心问题是如何找到组件变化的source_ids(0意味着删除,所以我们不希望这些条目出现在结果中)以及如何同时分配各自的结束日期。为了便于说明,我将您的示例简化了一点:

  • 只有一个component_type(我考虑到可能有连续的条目具有不变的值)
  • 只有一个entity_id,所以我们可以忽略它

将这个更简单的版本扩展到您的实际问题应该很容易。

这是一个示例输入:

tbody> <<tr>245
source_id effecve_date value
12020-01-01100
2020-01-03100
32020-01-0580
2020-01-100
2020-01-1230

相关内容

最新更新