- useridごとにPCで最初に購入した日を求める
- PCで最初に購入した日以降にSPで購入した日をuseridごとに求める
- ピボットテーブル形式で表示する
やりたいことは↑であっていますか? あっているなら、たとえば以下のようなSQLで実現できると思います。
SQL
1SELECT
2 T1.PC購入日,
3 COUNT(CASE WHEN T2.購入日 = '2021-12-01' THEN T1.userid END) AS "2021-12-01",
4 COUNT(CASE WHEN T2.購入日 = '2021-12-02' THEN T1.userid END) AS "2021-12-02",
5 COUNT(CASE WHEN T2.購入日 = '2021-12-03' THEN T1.userid END) AS "2021-12-03",
6 COUNT(CASE WHEN T2.購入日 = '2021-12-04' THEN T1.userid END) AS "2021-12-04"
7FROM (
8 SELECT userid, MIN(購入日) AS PC購入日
9 FROM tbl
10 WHERE 購入端末 = 'PC'
11 GROUP BY userid
12) AS T1
13JOIN tbl AS T2 ON T1.userid = T2.userid AND T1.PC購入日 < T2.購入日
14WHERE T2.購入端末 = 'SP'
15GROUP BY T1.PC購入日
2021/12/23 10:20 追記
「その日に使われたPC経由の注文数」
「列の12月1日〜12月7日」
をいれる方法はありますでしょうか?
やり方はいろいろあると思いますが、たとえば以下のようなSQLはどうでしょうか?
SQL
1SELECT
2 T1.PC購入日,
3 (SELECT COUNT(*) FROM tbl T3 WHERE T1.PC購入日 = T3.購入日 AND 購入端末 = 'PC') AS PC購入数,
4 COUNT(CASE WHEN T2.購入日 = '2021-12-01' THEN T1.userid END) AS "2021-12-01",
5 COUNT(CASE WHEN T2.購入日 = '2021-12-02' THEN T1.userid END) AS "2021-12-02",
6 COUNT(CASE WHEN T2.購入日 = '2021-12-03' THEN T1.userid END) AS "2021-12-03",
7 COUNT(CASE WHEN T2.購入日 = '2021-12-04' THEN T1.userid END) AS "2021-12-04",
8 COUNT(CASE WHEN T2.購入日 = '2021-12-05' THEN T1.userid END) AS "2021-12-05",
9 COUNT(CASE WHEN T2.購入日 = '2021-12-06' THEN T1.userid END) AS "2021-12-06",
10 COUNT(CASE WHEN T2.購入日 = '2021-12-07' THEN T1.userid END) AS "2021-12-07"
11FROM (
12 SELECT userid, MIN(購入日) AS PC購入日
13 FROM tbl
14 WHERE 購入端末 = 'PC'
15 GROUP BY userid
16) AS T1
17JOIN tbl AS T2 ON T1.userid = T2.userid AND T1.PC購入日 < T2.購入日
18WHERE T2.購入端末 = 'SP'
19GROUP BY T1.PC購入日