下記SQLを教えてください。
テーブル構成は(基本的には)変更不可という前提でお願いいたします。
以下のような会員テーブルがあります。
ユーザID毎に、入会日、退会予定日が登録されており、
ユーザID+履歴No.でプライマリとします。
このテーブルは、月に一度、退会手続きのなかった会員に対して、
自動で新規レコード追加します(継続手続)。
ある期間休んだ後、再入会の場合も手動で新規レコード追加されます。
ステータスは有効(1)/無効(0)の判定です。
no user_id start_day end_day status
----------------------------------------
1 aaa 2002/12/01 2002/12/31 0
2 aaa 2003/01/01 2003/01/31 0
3 bbb 2003/01/01 2003/01/31 0
4 aaa 2003/02/01 2003/02/28 1
5 bbb 2003/02/02 2003/02/28 1
6 ccc 2003/02/01 2003/02/28 1
とデータが入っている場合に、
新規登録ユーザ(No.6)および
再入会ユーザ(No.5)をえらびたいのです。
あるユーザが自動継続かどうかの判定は、
status=1のレコードのend_dayと
そのひとつ古いレコードのend_dayが連続していることです。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
これでどうでしょう。
status=1で、かつ
user_idが同じで開始日の前日を終了日に持ったレコードが存在しないもの
を検索してみました。
select a.user_id from table a
where a.status = '1'
and 0 = (select count(*) from table
where user_id=a.user_id
and end_day=to_char(to_date(a.start_day,'yyyy/mm/dd')-1,'yyyy/mm/dd)');
No.3
- 回答日時:
(oracle)
select a.* from members a, members b where
a.status = 1
and a.user_id = b.user_id(+)
and a.start_day - 1 = b.end_day(+)
and b.rowid is null
-- and a.no > b.no(+)
-- and b.status(+) = 0
No.2
- 回答日時:
select user_id
from テーブル a
where status = 1
and not exist
(select * from テーブル b
where b.user_id = a.user_id
and b.end_day = a.start_day - 1);
こんな感じでいかがでしょうか。
start_day,end_dayはdate型であることが前提です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
1テーブル&複数レコードの更新...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
mysqlのdeleteのサブクエリーで...
-
Updateの複数テーブル条件時のL...
-
バインド変数について
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
select文のwhere句に配列を入れ...
-
ある条件の最大値+1を初番する...
-
[MySQL] UNIQUE制約の値を更新...
-
SQLサーバから、項目の属性(型...
-
DataTableで重複行を削除したい
-
Access パラメータクエリをcsv...
-
単純なクエリーなのにSELECTし...
-
Yahoo .comの idには年齢制限、...
-
マイクラPC版のコマンドで効率...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
副問合せの書き方について
-
select文のwhere句に配列を入れ...
-
マイクラPC版のコマンドで効率...
-
SQLサーバから、項目の属性(型...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] 3つのテーブルの結合で...
-
Access パラメータクエリをcsv...
-
SQLにて特定の文字を除いた検索...
-
SQL Left Join で重複を排除す...
-
ストアドのエラーについて
-
Unionした最後にGROUP BYを追加...
-
バインド変数について
-
PL/SQLの変数について
-
sqlで、600行あるテーブルを100...
-
WordpressのContact form 7でzi...
-
selectした大量データをinsert...
-
inner joinをすると数がおかし...
おすすめ情報