質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

1615閲覧

MySqlで、過去未来のレコードの中から、指定日に一番近い最大日のレコード抽出方法を教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1グッド

0クリップ

投稿2015/12/10 08:29

JavaでMySqlの、SQL文を作っています。

下記のSQL文をご教授頂ければ幸いです。

条件1.過去未来のレコードの中から、指定日に一番近い最大日のレコード抽出方法を教えてください。

条件2.指定日は、含まない。

条件3.未来に有効なレコードがあれば、そのid2のレコードは一つも抽出しない。

条件4.delete_flag = 1 のレコードは、抽出対象外。

■SQLへ、"2015-12-09"を渡した場合、

DB例

id id2 nama resarve_date reserve_starttime delete_flag ※delete_flag=1は、抽出対象外。
1 1 山田 2015-12-09 12:50 0

2 1 山田 2015-12-09 13:30 0 ← 抽出対象のレコード

3 1 山田 2015-12-09 12:30 1

4 1 山田 2015-12-23 15:30 1

5 2 山田 2015-02-12 11:30 0

6 2 山田 2015-12-11 11:30 0 ← 指定日よりも未来があるので、id2の全レコードは抽出対象外。

7 2 山田 2016-03-10 13:00 1


sinobi👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izkn

2015/12/10 09:09

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
rossi46hiro

2015/12/10 09:26

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
退会済みユーザー

退会済みユーザー

2015/12/11 12:55

id=2が抽出対象である、と書かれていますが、このレコードのresarve_dateは 2015-12-09 であり、指定日と同じです。つまり条件2に反しているように見えますが、これはどう捉えればよいでしょうか。
ooi

2015/12/13 17:18

この局面ではid=5が唯一の抽出対象なんでしょうね。
ooi

2015/12/13 18:09

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
guest

回答1

0

うーん、よく分からないけどこんな感じでしょうか。
って退会済みですか

sql

1SELECT a.* FROM `table` a , (select * from `table` WHERE resarve_date>='2015-12-09' and delete_flag=0) b where a.id2<>b.id2 and a.resarve_date<'2015-12-09' and a.delete_flag=0 group by a.id order by DATEDIFF('2015-12-09' ,a.resarve_date),a.reserve_starttime desc limit 1;

投稿2015/12/13 17:58

ooi

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ooi

2015/12/13 17:58 編集

バッジゲット
moredeep

2015/12/14 00:10

ちょっといちゃもんつけさせてください。 指定日より手前であることは、a.id2<>b.id2で保障されますので、メインクエリの2個目の条件は不要だと思います。また、bのSELECT句も、*で抽出していますが、DISTINCT id2のみでよいかと。
ooi

2015/12/14 07:52

確かに。
ooi

2015/12/14 13:02

moredeepさん これでどうでしょう。 SELECT a.* FROM `table` a , (select DISTINCT(id2) from `table` WHERE resarve_date>='2015-12-09' and delete_flag=0) b where a.id2<>b.id2 and a.delete_flag=0 order by DATEDIFF('2015-12-09' ,a.resarve_date),a.reserve_starttime desc limit 1
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問