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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

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

Q&A

解決済

1回答

9331閲覧

SQLで最大値を求めつつINNER JOIN

okhuzs

総合スコア7

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

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

0グッド

1クリップ

投稿2018/04/16 04:30

前提・実現したいこと

SQLITE3でSQLの学習をしている初学者です。
複数のテーブルからデータを結合し以下のような結果を得れるSQL文を作ろうとしています。
|ID|name|url|end(最大値)|title|
|:--|:--:|--:|
|1|mySQL|www.oracle.com|201604181900|mySQL tutorial part5|
|2|oracleDB|www.oracle.com|201604161300|step up oracle lesson3|
|3|PostgreSQL|www.postgresql.com|201604151300|PostgreSQL for beginner part2|

各テーブル

テーブル名:DB_LIST
|ID|name|type
|:--|:--:|
|1|mySQL|RDBMS
|2|oracleDB|RDBMS
|3|PostgreSQL|RDBMS

テーブル名:DB_official

nameurl
mySQLwww.oracle.com
oracleDBwww.oracle.com
PostgreSQLwww.postgresql.com

テーブル名:show_schedule
|start|end|name|title|summary|
|:--|:--:|:--:|
|201604141800|201604141900|mySQL|mySQL tutorial part1|what's SQL|
|201604151800|201604151900|mySQL|mySQL tutorial part2|what's table|
|201604161800|201604161900|mySQL|mySQL tutorial part3|what's field|
|201604171800|201604171900|mySQL|mySQL tutorial part4|what's CREATE|
|201604181800|201604181900|mySQL|mySQL tutorial part5|what's INSERT|
|201604141200|201604141300|oracleDB|step oracle lesson1|how use INSERT|
|201604151200|201604151300|oracleDB|step oracle lesson2|how use SELECT|
|201604161200|201604161300|oracleDB|step oracle lesson3|how use DELETE|
|201604141200|201604141300|PostgreSQL|PostgreSQL for beginner part1|noSQL|
|201604151200|201604151300|PostgreSQL|PostgreSQL for beginner part2|RDMBS|

startとendはINTEGERでその他はTEXTで宣言しています。

試したこと

その1

SQL

1SELECT DB_list.ID,DB_list.name,DB_official.url FROM DB_list INNER JOIN DB_official ON DB_list.name = DB_official.name;
IDnameurl
1mySQLwww.oracle.com
2oracleDBwww.oracle.com
3PostgreSQLwww.postgresql.com

DB_LISTとDB_officialの合成が出来た。

その2

SQL

1SELECT end, name, title FROM show_schedule AS m 2WHERE end = ( 3 SELECT max(end) 4 FROM show_schedule AS s 5 WHERE m.name = s.name 6 )
endnametitle
201604181900mySQLmySQL tutorial part5
201604161300oracleDBstep up oracle lesson3
201604151300PostgreSQLPostgreSQL for beginner part2

show_scheduleからnameで括りendの最大値を求めることが出来た。

質問

その1とその2のSQL文を合体できれば実現出来そうな気がするのですが、その方法がわかりません。ご教授お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

その1とその2のSQL文を合体できれば実現出来そうな気がするのですが

正にその通りです。

SQL

1SELECT DB_list.ID,DB_list.name, m.end, DB_official.url 2FROM DB_list INNER JOIN DB_official ON DB_list.name = DB_official.name 3 inner join show_schedule m on ON DB_list.name = m.name 4WHERE end = ( 5 SELECT max(end) 6 FROM show_schedule AS s 7 WHERE m.name = s.name 8 )

1.必要な情報を持つテーブルを集める(結合する)。
2.必要な行のみにするため、フィルターする(where条件を指定する)。
のような手順で考えると、イメージしやすいのではないでしょうか。

投稿2018/04/16 04:41

編集2018/04/16 04:46
sazi

総合スコア25138

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

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

okhuzs

2018/04/16 07:33

ありがとございます。意図した結果が得られました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問