sql 读取被增量同步过的数据,如何补全缺少的行

id val date
1 100 17/03/03
1 200 17/04/03
1 300 17/05/03
2 200 17/03/03
2 300 17/05/03
3 400 17/03/03

如上表所示:id为1的在3、4、5月均有增加,数据库同步更新了,id为2的只有3、5两个月有更新(相对于id为1的缺少4月数据)。同理id为3的只有3月有数据,缺少4、5月。

目前需求是利用表中数据绘制折线图,那么该如何将id为2的数据的4月数据补上(因为4月没变,所以val与3月一样)、将id为3的数据的4、5月数据不上(因为4、5月没变,所以val与3月一样)

读取完大概需要这样子的东东:

[{
    id: 1,
    val: 100,
    date: 17/03/03
},{
    id: 1,
    val: 200,
    date: 17/04/03
},{
    id: 1,
    val: 300,
    date: 17/05/03
},{
    id: 2,
    val: 200,
    date: 17/03/03
},{
    id: 2,
    val: 300,
    date: 17/04/03
},{
    id: 2,
    val: 300,
    date: 17/05/03
},{
    id: 3,
    val: 400,
    date: 17/03/03
},{
    id: 3,
    val: 400,
    date: 17/04/03
},{
    id: 3,
    val: 400,
    date: 17/05/03
},]
阅读 2.8k
1 个回答
  • 第一步,遍历所有数据,得到 date 列的集合,比如: {3,4,5} ,按升序排序,得到 [3,4,5]

  • 第二步,按 id 分组扫,比如,扫 id=2 的数据。

    • 2.1 遍历 id=2 的数据,用 date 列建立 val 列的索引,结果大概是: {3: 200, 5:300}

    • 2.2 使用前面的,完整的 [3,4,5] 序列来反补 id=2 的数据,即, 先定 id=2 的数据是 [3,4,5] ,然后依次从 2.1 的索引中取值,取不到的,就自己补一个 - 吧。