下記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.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型であることが前提です。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- 消費者問題・詐欺 お金を取り返すことは可能でしょうか? 4 2023/01/07 13:17
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
同一のユーザー、同一商品のと...
-
マイクラPC版のコマンドで効率...
-
テーブル名を省略して「h.id」...
-
副問合せの書き方について
-
複数テーブルのGROUP BY の使い...
-
select文のwhere句に配列を入れ...
-
SQLで残高計算
-
クエリ表示と、ADOで抽出したレ...
-
php+MySQLでレコードが何行目か...
-
select文で特定のIDを抽出しupdate
-
MySQLでのバイナリデータ削除方法
-
sqlで、600行あるテーブルを100...
-
SQL Left Join で重複を排除す...
-
書籍の内容はまともでしょうか?
-
MySQLのint型で001と表示する方...
-
【MySQL】本当に困っているので...
-
SQLサーバから、項目の属性(型...
-
SELECT/別テーブルのレコード...
-
AUTO_INCREMENTのあるテーブル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報