MySQLで(Javaで)、
1.過去のみに、予約日のあるユーザーのレコードの最大日時のレコードを抽出
2.指定日以降に、予約日があれば、そのユーザーのレコードは、抽出しない。
SQL文を教えてください。
SQLへ、 検索キー: name like '%山田%' と、yoyaku_date = '2015-12-03' を指定した場合、
下記のレコードのみちゅしゅつしたい。
データ例)
id user_id sei mei yoyaku_date yoyaku_time sakujyo
※ sakujyo=1は、論理削除で抽出対象外。
-------------------------------------------------------------------------
1 30 山田 浩司 2015-12-02 09:00 0
2 30 山田 浩司 2015-10-30 18:21 0
3 30 山田 浩司 2015-12-02 11:00 0 ← 抽出対象
4 30 山田 浩司 2015-12-02 10:00 1
5 40 鈴木 孝雄 2014-12-03 18:40 0 ← 指定日以降があるので、
6 40 鈴木 孝雄 2015-12-03 09:00 1 user_id=40のこれーどは、
7 40 鈴木 孝雄 2015-12-02 11:00 0 抽出対象外。
8 40 鈴木 孝雄 2015-12-02 10:00 1
-------------------------------------------------------------------------
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
誰かいい方法を思いつく人がいないかと思って、様子を見ていたのですが、誰も回答しないようなので、回答しておきます。
いくつかめんどくさい問題があります。
それは主に「name like '%山田%' 」という検索キーが問題になります。
(name ではなく sei だと思いますが)
この条件では、
山田浩司さん以外にも山田さんがいた場合、
姓に山田を含む「前山田」さんなどがいた場合、
など、複数の人が検索される可能性があります。
その場合、一つのSQL文で、それぞれの人についての過去の最新のレコードを検索するとなると、かなりメンドクサイSQLになってしまいます。
また、場合によっては、user_idが同じでも結婚などによって途中で姓が変わった人のことも考慮する必要があるかもしれません。
そのため「sei like '%山田%' 」はやめて「user_id = 30」でいいことにすれば、
SELECT * FROM テーブル名 t WHERE (user_id = 30) AND (yoyaku_date < '2015-12-03') AND (sakujyo != 1) AND (NOT EXISTS (SELECT * FROM テーブル名 e WHERE (e.id = t.id) AND (e.yoyaku_date >= '2015-12-03') AND (e.sakujyo != 1))) ORDER BY yoyaku_date DESC, yoyaku_time DESC LIMIT 1;
で、idが3のレコードが検索されます。
念のために解説しておくと、
NOT EXISTS (SELECT * FROM テーブル名 e WHERE (e.id = t.id) AND (e.yoyaku_date >= '2015-12-03') AND (e.sakujyo != 1))
は、「指定日以降に、予約日があれば、そのユーザーのレコードは、抽出しない。」の指定です。
ORDER BY yoyaku_date DESC, yoyaku_time DESC LIMIT 1
は、新しい順に並べて最初の1つを検索する指定です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Oracle 列1と列2の関係性で列3の条件に一致するレコードを抽出したい 1 2022/04/13 07:46
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) Excelの1つのセルにそれぞれ文字+数字が入力されていて、 数字のみ抽出して合計したいです。(合計 4 2023/03/16 23:44
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JAの支部?地域の農協のカード...
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
マイクラでPythonのプログラミ...
-
JSFタグのfタグとは
-
list の空は [] ってあわらすのに
-
下記問題の答えが"D"になる意味...
-
改行含むテキストの表示の仕方
-
Eclipse 動的プロジェクトで404...
-
キー入力について
-
jdk17.06のインストーラーが起...
-
EclipseとVisual StudioをPC1台...
-
プログラミング教えてください。
-
正規表現について質問です。 カ...
-
CSV出力を画面から選択したデー...
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
Jupyter notebookですわかりま...
-
JaneStyleのスレッドが見れなく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングの問題です。大...
-
マイクラでPythonのプログラミ...
-
配列にnullを代入すると、null...
-
jdk17.06のインストーラーが起...
-
Eclipse 動的プロジェクトで404...
-
list の空は [] ってあわらすのに
-
下記問題の答えが"D"になる意味...
-
JaneStyleのスレッドが見れなく...
-
正規表現について質問です。 カ...
-
eclipseで作ったプログラムを他...
-
改行含むテキストの表示の仕方
-
リレーションエンティティクラ...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
キー入力について
-
自作Androidアプリのデータ引き...
-
問題作成のWebアプリの作り方を...
-
eclipse実行ができない
-
変数名とDBカラム名の関係性に...
-
デバッグツールの具体例を教え...
おすすめ情報