重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

MySQLのDBにmemberという下記テーブルがあります。

id, member_id, follower_count, date
1, 101, 1, 2018-10-01
2, 102, 1, 2018-10-02
3, 103, 2, 2018-10-30
4, 104, 5, 2018-10-31
5, 105, 7, 2018-11-01
6, 101, 18, 2018-11-07
7, 102, 22, 2018-11-15
8, 103, 35, 2018-11-27
9, 104, 44, 2018-11-30
10, 105, 46, 2019-01-01
11, 101, 55, 2019-01-09
12, 102, 68, 2019-01-31
13, 103, 79, 2019-02-01
14, 104, 132, 2019-02-01
15, 105, 234, 2019-02-06

このテーブルから、1ヶ月以上前のデータで、さらに、月初と月末を除いたデータを削除したいのですが、どのようなsqlを書いたら可能でしょうか?

削除する日が2月8日だった場合、最終的に下記のように表示させたいと思っています。

id, member_id, follower_count, date
1, 101, 1, 2018-10-01
4, 104, 5, 2018-10-31
5, 105, 7, 2018-11-01
9, 104, 44, 2018-11-30
10, 105, 46, 2019-01-01
11, 101, 55, 2019-01-09

よろしくお願い致します。

A 回答 (1件)

> 1ヶ月以上前のデータで、さらに、月初と月末を除いたデータ



だとしたら、命題のようなid=1,4,5,9,10,11
意外にも1ヶ月以内の12,13,14,15も残るのでは?

やりかた
・元データ
create table member(id int primary key, member_id int, follower_count int, d date,unique(member_id,d));
insert into member values
( 1,101, 1,'2018-10-01'),
( 2,102, 1,'2018-10-02'),
( 3,103, 2,'2018-10-30'),
( 4,104, 5,'2018-10-31'),
( 5,105, 7,'2018-11-01'),
( 6,101, 18,'2018-11-07'),
( 7,102, 22,'2018-11-15'),
( 8,103, 35,'2018-11-27'),
( 9,104, 44,'2018-11-30'),
(10,105, 46,'2019-01-01'),
(11,101, 55,'2019-01-09'),
(12,102, 68,'2019-01-31'),
(13,103, 79,'2019-02-01'),
(14,104,132,'2019-02-01'),
(15,105,234,'2019-02-06');

・削除
delete from member
where id in (select id from (select id
from member
where not 1 in(date_format(d,"%e"),date_format(d + interval 1 day,"%e"))
and d+interval 1 month<'2019-02-08'
) as t1)
    • good
    • 0
この回答へのお礼

yambejpさん、ありがとうございます。
ご指摘の通り「1ヶ月以内の12,13,14,15も残るのでは?」が正しいです。私のミスです。

また、教えていただいたsqlで思い通りのデータが残りました。
いつも助かります。ありがとうございました。

お礼日時:2019/02/08 20:04

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