商品コードのグループごとに 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) グループ化部分の処理方法。つまり、日付の違いは、同じ品目コードに対してのみ計算されます。
次のクエリを試しましたが成功しませんでした:
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)