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
},]
第一步,遍历所有数据,得到
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 的索引中取值,取不到的,就自己补一个-
吧。