我正在尝试更新每组项目代码的 datedelta 字段。datedelta 字段应该包含自上次销售特定商品以来的天数。例如,我的表在更新之前是这样的:
表:“销售额”
id date datedelta itemcode
--------------------------------------------
1 2012-09-01 null 1
2 2012-09-08 null 1
3 2012-09-20 null 1
4 2012-03-01 null 2
5 2013-06-01 null 3
6 2013-06-06 null 3
更新后,我希望表格如下所示:
id date datedelta itemcode
--------------------------------------------
1 2012-09-01 0 1
2 2012-09-08 7 1
3 2012-09-20 12 1
4 2012-03-01 0 2
5 2013-06-01 0 3
6 2013-06-06 5 3
我在以下几个方面遇到问题:
a)如何进行自我加入并参考上一个日期的记录,以及
b) 如何处理分组部分。即,仅针对相同的 itemcode 计算日期差异。
我尝试了以下查询但没有成功:
UPDATE sales AS s INNER JOIN sales AS prev ON prev.id IN (SELECT t.id FROM sales WHERE MAX(t.saledate) < r.saledate GROUP BY itemcode ORDER BY itemcode) SET datedelta = IFNULL(DATEDIFF(r.saledate, p.saledate), 0)