質問するログイン新規登録
SQL

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

Q&A

2回答

6932閲覧

【SQL】結合したレコードの一番古い情報を取得したい

suzuo

総合スコア10

SQL

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

0グッド

0クリップ

投稿2019/01/06 14:44

0

0

ユーザーテーブルとログインテーブルを用意します。
ユーザーテーブルとログインテーブルを結合し、ログイン日時が2018/11/31 00:00:00以降のものを条件とし、
ログイン日時が一番古いものを取得するSQLを書きたいのですがわかりません。教えて頂けないでしょうか

ユーザーテーブル
ID name
1 tanaka
2 yamada
3 yoshida

ログインテーブル
No user_id login_date
1 1 2018/10/31 00:00:00
2 3 2018/11/11 00:00:00
3 2 2018/12/11 00:00:00
4 1 2018/12/12 00:00:00
5 2 2018/12/21 00:00:00

結合結果
user_id name login_date
1 tanaka 2018/10/31 00:00:00
2 yamada 2018/12/11 00:00:00

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

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

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

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

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

Orlofsky

2019/01/08 08:11

同じSQLでもデータベースによって方言が大きいですから、どのデータベースを使うのかを質問のタグで明示したり、バージョンも明記した方が適切なコメントが付き易いです。SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう! https://www.ashisuto.co.jp/corporate/column/technical-column/detail/1197236_2274.html
Orlofsky

2019/01/08 08:12

https://teratail.com/questions/167224 のように使っているテーブルの CREATE TABLE と INSERT で提示するとSQLをすぐ実行できるので、適切なコメントが付き易いかと。
guest

回答2

0

こういうことでは?

SQL

1create table user(ID int unique,name varchar(20)); 2insert into user values(1,'tanaka'),(2,'yamada'),(3,'yoshida'); 3create table login(No int unique,user_id int,login_date datetime); 4insert into login values 5(1,1,'2018-10-31 00:00:00'), 6(2,3,'2018-11-11 00:00:00'), 7(3,2,'2018-12-11 00:00:00'), 8(4,1,'2018-12-12 00:00:00'), 9(5,2,'2018-12-21 00:00:00'); 10 11select * 12from user as t1 13inner join ( 14select user_id,min(login_date) as min_login_date from login 15group by user_id 16having max(login_date)>'2018-11-30 00:00:00' 17) as t2 18on t1.ID=t2.user_id 19

11/31など存在しない日時を指定すると回答がブレるのでおすすめできません

投稿2019/01/07 02:02

yambejp

総合スコア117967

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

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

0

DBMSやデータ状況によってSQLの効率は変わります。

主に以下のような問合せによって取得できます。

引用テキストログイン日時が2018/11/31 00:00:00以降のものを条件とし、ログイン日時が一番古いものを取得する

※上記条件を見落としていたので修正
・相関副問合せ

SQL

1select id as user_id, name 2 , (select min(login_date) from ログイン where user_id=usr.id and login_date>='2018/11/30 00:00:00') as login_date 3from ユーザー as usr

・キーを揃えて結合

SQL

1select id as user_id, name, login_date 2from ユーザー as usr left join ( 3 select user_id, min(login_date) as login_date from ログイン where login_date>='2018/11/30 00:00:00' group by user_id 4 ) login 5 on user.id=login.user_id

投稿2019/01/06 16:16

編集2019/01/07 03:11
sazi

総合スコア25430

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問