【发布时间】:2013-03-22 18:03:43
【问题描述】:
我有一个表格,其中包含 (id,letter,date) 字段和一些数据:
1 A 2012-01-01
2 B NULL
3 C NULL
4 D 2012-01-15
我想用最近的非 NULL 值的平均日期填充 NULL 值。像这样:
1 A 2012-01-01
2 B 2012-01-08
3 C 2012-01-08
4 D 2012-01-15
或者,也许,甚至是这样:
1 A 2012-01-01
2 B 2012-01-08
3 C 2012-01-11
4 D 2012-01-15
两种变体都很棒。有没有简单的方法在 MySQL 中实现?
提前致谢
UPD 表非常大,大约有 700.000 条记录,并且像描述的那样大约有 50.000 个间隙。
UPD2 更干净一点:表格可能是这样的:
1 A 2012-01-01
2 B NULL
3 C NULL
4 D 2012-01-15
5 E NULL
6 F 2012-01-17
7 G NULL
8 H NULL
9 I 2012-01-20
预期的结果是这样的:
1 A 2012-01-01
2 B **2012-01-08**
3 C **2012-01-08**
4 D 2012-01-15
5 E **2012-01-16**
6 F 2012-01-17
7 G **2012-01-18**
8 H **2012-01-18**
9 I 2012-01-20
(星号表示更改的值)。谢谢
UPD3 感谢大家。但我会用另一种方式来做,用一个简单的公式计算日期:need_date = [(max(date)-min(date))/(max(id)-min(id)]*(my_ID-min(id )) + min(日期)
【问题讨论】:
-
看看第一组数据,如果你还有
5, E, NULL,6, F, 2012-01-20这样的记录,结果会怎样? -
为什么您要处理数据?您应该在检索记录时进行此计算。
-
记录的顺序和字段的值有什么关系(即A在时间上总是在B之前)?
-
@J W 感谢您的回答。结果如下:(结果表的前4条记录相同)
5 E 2012-01-176 F 2012-01-20。因此,第 5 条记录将有date列作为最接近的非空值的平均值。 -
@MikyDinescu 感谢您的回答。是的,它会。如果 id1 > id2,date1 应该大于 date2
标签: mysql date average gaps-in-data