気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
丸投げはダメですよ~。
2018/10/23 09:48 編集
データは画像じゃなくテキストで貼ってください。それとどういう結果を希望するのか追記してください。IDと購入日だけあってその件数を右に集計するってことですかね?
回答3件
0
ベストアンサー
Window関数を使用すると良いと思います。
SQL
1select ID, 購入日, count(*) over(partition by id order by 購入日) as 累計購入回数 2from tbl 3order by 購入日, ID
DATA
1create table tbl(id int,購入日 date,unique(id,購入日)); 2insert into tbl values 3(500,'2018-04-16'), 4(501,'2018-04-16'), 5(500,'2018-04-17') 6;
追記
購入日単位でカウントということは集計が必要になるので、相関サブクエリーの方が効率的です。
SQL
1select id,購入日 2 ,(select count(distinct 購入日)+1 from tbl where id=t1.id and 購入日<t1.購入日) as 累計購入回数 3from tbl as t1 4order by 購入日 ,id
DATA
1create table tbl(id int,購入日 date); 2insert into tbl values 3(500,'2001-03-24'), 4(500,'2001-03-24'), 5(500,'2001-03-24'), 6(500,'2001-03-27'), 7(500,'2001-03-27'), 8(500,'2001-03-27'), 9(500,'2001-03-27'), 10(500,'2001-03-27'), 11(500,'2001-03-27'), 12(500,'2001-07-21'), 13(500,'2001-07-29'), 14(500,'2003-04-11'), 15(500,'2004-04-26'), 16(500,'2004-09-25'), 17(500,'2006-02-03') 18;
投稿2018/10/23 10:16
編集2018/10/24 04:21総合スコア25195
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/24 00:46
sazi様
至らぬ質問に丁寧にお答えいただき、ありがとうございます。
早速、試させていただいたところ
下記のように帰ってきました。
購入日のレコードごとに、累計購入回数が+1づつ増えていくイメージなのですが、
可能でしょうか?
<結果>
id 購入日 累積購入回数
500 20180416 2
501 20180416 1
500 20180417 2
<出力希望>
id 購入日 累積購入回数
500 20180416 1
501 20180416 1
500 20180417 2
2018/10/24 02:27
元のSQLでは以下のようになるはずです(累計の値は合っている)
id 購入日 累積購入回数
500 20180416 1
500 20180417 2
501 20180416 1
希望に沿うには並びを指定する必要があります。
(回答にorder by を追記しました)
退会済みユーザー
2018/10/24 04:03
sazi様
早速のご回答ありがとうございます。
説明不足で申し訳ございません
結果で再度、お聞きしたいことがございます。
どうぞよろしくお願いいたします。
<結果>
id 購入日 累積購入回数
500 20010324 3
500 20010324 3
500 20010324 3
500 20010327 9
500 20010327 9
500 20010327 9
500 20010327 9
500 20010327 9
500 20010327 9
500 20010721 10
500 20010729 11
500 20030411 12
500 20040426 13
500 20040925 14
500 20060203 15
<出力希望データ>
id 購入日 累積購入回数
500 20010324 1
500 20010324 1
500 20010324 1
500 20010327 2
500 20010327 2
500 20010327 2
500 20010327 2
500 20010327 2
500 20010327 2
500 20010721 3
500 20010729 4
500 20030411 5
500 20040426 6
500 20040925 7
500 20060203 8
2018/10/24 04:22
追記しました。
退会済みユーザー
2018/10/24 05:19
sazi様
ご丁寧に対応いただき、誠にありがとうございました。
無事完了できました。
0
もしかしてこういうことですか?
- 元データ
SQL
1create table tbl(id int,kounyu date,unique(id,kounyu)); 2insert into tbl values 3(500,'2002-04-16'), 4(501,'2002-04-16'), 5(503,'2002-04-16'), 6(501,'2002-04-17'), 7(503,'2002-04-17'), 8(508,'2002-04-18'), 9(510,'2002-04-19'), 10(513,'2002-04-20'), 11(514,'2002-04-20'), 12(503,'2002-04-20');
- 検索
SQL
1select id,kounyu,(select count(*)+1 from tbl where id=t1.id and kounyu<t1.kounyu) as ruikei 2from tbl as t1 3order by kounyu asc,id asc
投稿2018/10/23 09:48
総合スコア114843
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/24 07:14
yambejp様
拙い質問にご丁寧にご対応いただき、誠にありがとうございました。
アドバイスいただいたように
相関サブクエリで解決いたしました。
0
こうですかね
SQL
1SELECT ID, 購入日, COUNT(購入日) as 累計購入回数 2FROM tablename 3GROUP BY ID, 購入日 4ORDER BY 購入日
投稿2018/10/23 11:00
編集2018/10/23 11:02総合スコア51
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。