プロが教える店舗&オフィスのセキュリティ対策術

現在、ECサイトのログを分析しています。

分析の中で「注文番号単位に該当顧客が何回目の購入かを知りたい」というものがあり、その取得方法について困っています。
取得したいイメージについては以下のとおりです。

【取得したいイメージ】
注文番号△顧客番号△顧客枝番△購入回数(これが取得したい)
0001△aaaa△1△1
0002△aaaa△2△1
0003△aaaa△2△2
0004△bbbb△1△1
0005△bbbb△1△2
0006△aaaa△2△3
0007△cccc△1△1

【前提】
・注文番号は注文毎にユニーク(上記テーブルのPK)
 また注文番号は注文日とリンクして作成されるため、注文番号が若い順で注文日付が古い
・顧客は顧客番号と顧客枝番で一意に定まる
・購入回数は該当注文における同一顧客単位の注文回数とする(3回目であれば3が入る)

【やろうとしたこと】
できればMySQL内で関係したい(CとかPHPとかでプログラムを作らないで対応したい)ため、以下のSQLを作成しましたが、購入回数が全て1になってしまい、取得できません。
(注文番号=order_no,顧客番号=c_no,顧客枝番c_eda,購入回数=r)

SET @r := 0, @id := 0, @no := 0, @eda := 0;
UPDATE orders_seq SET cust_seq_no = (
CASE
WHEN c_no = @id AND c_eda = @eda AND order_no = @no THEN @r
WHEN c_no = @id AND c_eda = @eda THEN (@r := @r + 1) + 0*LENGTH(@no := order_no)
ELSE (@r := 1) + 0*LENGTH(@id := c_no)*LENGTH(@eda := c_eda)*LENGTH(@no := order_no)
END)
ORDER BY c_no,c_eda,order_no;

どなたか教えていただけますと幸いです。

A 回答 (1件)

元データ


create table orders_seq(order_no int(4) unsigned zerofill not null unique,c_no varchar(10),c_eda int not null default 1,r int not null default 0);
insert into orders_seq(order_no,c_no,c_eda) values(1,'aaaa',1),(2,'aaaa',2),(3,'aaaa',2),(4,'bbbb',1),(5,'bbbb',1),(6,'aaaa',2),(7,'cccc',1);

更新
update orders_seq as t1
,(select t3.order_no
,(select count(*)+1 from orders_seq as t4 where t3.c_no=t4.c_no and t3.c_eda=t4.c_eda and t3.order_no>t4.order_no) as r
from orders_seq as t3) as t2
set t1.r=t2.r where t1.order_no=t2.order_no
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!