0

这个答案向我展示了如何从数据中获取年度变化:

UPDATE values_table as a
join  values_table as b 
ON b.date_sampled = DATE_SUB(a.date_sampled, INTERVAL 1 YEAR)
set a.annual_change = a.sample_value - b.sample_value

这个答案向我展示了如何找到最接近的日期INTERVAL(在这个问题的情况下,相对于NOW()3 个结果):

SELECT event_id FROM Table ORDER BY ABS( DATEDIFF( EVENT_START_DATE, NOW() ) ) LIMIT 3

当日期有漏洞时,如何将两者结合起来以获得SELECT最接近期望的日期的年变化率INTERVAL


我终于有机会尝试戈登的答案,但我得到了Error in query (1054): Unknown column 'vt.date_sampled' in 'where clause'

我还尝试根据上面的第二个答案进行子查询ON b.date_sampled =,但它给出了Error in query (1064): Syntax error near 'SELECT date_sampled FROM values_table ORDER BY ABS( DATE_SUB(a.date_sampled, INT'

4

1 回答 1

2

MySQL 很难在update语句中引用更新表,但可以使用子查询。

我认为“一年前最近的日期”是相关子查询的一个很好的候选者:

UPDATE values_table vt
    set vt.annual_change = vt.sample_value - 
                           (select sample_value
                            from (select sample_value, date_sampled
                                  from values_table vt2
                                  where vt2.date_sampled <= DATE_SUB(vt.date_sampled, INTERVAL 1 YEAR) 
                                 ) t
                            order by date_sampled desc
                            limit 1
                           )

我认为您实际上会想要至少一岁的日期。但如果你想要最近的日期,同样的想法也有效:

UPDATE values_table vt
    set vt.annual_change = vt.sample_value - 
                           (select sample_value
                            from (select sample_value, date_sampled
                                  from values_table vt2
                                  where vt2.date_sampled <= DATE_SUB(vt.date_sampled, INTERVAL 1 YEAR) 
                                 ) vt2
                            order by ABS( DATEDIFF(vt.date_sampled, vt2.date_sampled))
                            limit 1
                           )
于 2013-06-12T16:27:56.150 回答