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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

Q&A

解決済

1回答

812閲覧

【SQL】3カラムのうち、2カラムの値をGroup byした後に、3つ目のカラムの値が最小のレコードを抽出したい

Okuyuki

総合スコア9

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

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

0グッド

0クリップ

投稿2019/03/18 11:22

編集2019/03/18 11:38

前提・実現したいこと

【SQL】3カラムのうち、2カラムの値をGroup byした後に、3つ目のカラムの値が最小のレコードを抽出したいです

(id),person,type,dateという3つのカラムを持つテーブルがあります。
personとtypeでgroup byを行い、dateが最小のレコードを取得したいのですが、方法をご教授頂けないでしょうか?

| id | person | type | date |
+--+--------+------+--------+
| 1 | A | 100 | 2019/3/1 |
| 2 | A | 200 | 2019/3/2 |
| 3 | A | 300 | 2019/3/3 |
| 4 | A | 200 | 2019/3/4 |
| 5 | B | 100 | 2019/3/1 |
| 6 | B | 300 | 2019/3/2 |
| 7 | B | 300 | 2019/3/2 |
| 8 | B | 300 | 2019/3/4 |

personとtypeが同じレコードの中から、dateが最小のレコードを抽出したいです
最終的に抽出したいデータは以下の通りです

| id | person | type | date |
+--+--------+------+--------+
| 1 | A | 100 | 2019/3/1 |
| 2 | A | 200 | 2019/3/2 |
| 3 | A | 300 | 2019/3/3 |
| 5 | B | 100 | 2019/3/1 |
| 6 | B | 300 | 2019/3/2 |

発生している問題・エラーメッセージ

該当のソースコード

試したこと

参照した質問
https://teratail.com/questions/62796

補足情報(FW/ツールのバージョンなど)

PostgresSQLを利用しています
※上記質問を参照したのですが、やりたい事が違うのか上手く出来ませんでした…

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

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

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

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

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

Orlofsky

2019/03/18 11:33

結果のtypeが1桁になっているのは、そういう要求でしょうか?
Okuyuki

2019/03/18 11:36

すみません、こちら修正ミスです 至急修正致します ※結果のtypeは、3桁出力のままです!
guest

回答1

0

ベストアンサー

SQL

1select person,type,min(date) 2from テーブル 3group by person,type

こんな単純な話じゃなくて?

最小日付の行を取得という事なら

SQL

1select * 2from テーブル t1 3where not exists( 4 select 1 from テーブル 5 where person=t1.person 6 and type=t1.type 7 and date<t1.date 8 )

投稿2019/03/18 11:38

編集2019/03/18 11:46
sazi

総合スコア25173

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

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

Okuyuki

2019/03/18 11:42

あ、、仰るとおりです、、、 変に色々な質問を見て、難しく書かなければと考えてしまっておりました… 非常に助かりました ご回答ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問