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

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

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

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

Q&A

解決済

2回答

2398閲覧

postgres 条件付きであるカラムの最大値を取得したい。

silversink

総合スコア16

PostgreSQL

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

0グッド

0クリップ

投稿2018/11/07 00:18

編集2018/11/07 02:54

postgres

1SELECT 2 3 tbl_test_A.satsuei_no, 4 tbl_test_A.name, 5 tbl_test_A.birthday, 6 tbl_test_A.age, 7 tbl_test_A.sex, 8 tbl_test_A.kensa_date, 9 tbl_test_A.kensa_time, 10 tbl_test_A.modality, 11 tbl_test_A.image_no, 12 tbl_test_A.dantai_code, 13 tbl_test_A.shozoku_code, 14 tbl_test_A.senryou, 15 tbl_test_A.gousha_no, 16 tbl_test_A.gishi_name, 17 tbl_test_A.pkey 18 19FROM tbl_test AS tbl_test_A 20 21INNER JOIN ( 22 SELECT 23 karute_no, 24 pkey AS max_pkey 25 FROM tbl_test 26 WHERE valid_flg ='1' 27 28 ) AS tbl_test_B 29 30ON 31tbl_test_A.karute_no = tbl_test_B.karute_no 32AND 33tbl_test_A.pkey = tbl_test_B.max_pkey 34 35WHERE 36tbl_test_A.valid_flg = '1' 37and 38tbl_test_A.kensa_date = '2018-11-06' 39 40ORDER BY max_pkey asc

tbl_testテーブルでvalid_flgが「1」のpkeyが最大値のものを取得したいです。
現在はpkeyが最大値のものを取得できていません。

下記のSQLでどのようにすればいいでしょうか。

/--------------------------------------------------------/

/--------------------------------------------------------/

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

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

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

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

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

m.ts10806

2018/11/07 00:23

ソースコードはマークダウンのcode機能を利用してください。
sazi

2018/11/07 00:27

tbl_testの一意キーはなんですか? それから、SQLはマークダウンして下さい。
m.ts10806

2018/11/07 01:08

質問は編集できます。経緯や背景は必要です。関連性のある自身の質問へのリンクがあれば尚良です
silversink

2018/11/07 01:24

一意キー pkeyです。 すみません、マークダウンは後程行います。
guest

回答2

0

ベストアンサー

前回の質問の応用で行けると思いますけど。

ただ、意図も汲みかねるところもあるので、別パターン

valid_flg='1'のデータのうち、karute_no内のpkeyが最大のもので、指定の日付のデータ

SQL

1SELECT * 2FROM tbl_test AS t1 3WHERE kensa_date = '2018-11-06' 4 and pkey=(select max(pkey) from tbl_test where valid_flg='1' and karute_no=t1.karute_no) 5ORDER BY pkey asc

投稿2018/11/07 00:42

編集2018/11/07 01:11
sazi

総合スコア25195

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

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

silversink

2018/11/07 01:29

説明不足てすみまえん。 想定通りの結果が得られました。
guest

0

集約関数(max)を使えば良いのでは。
SELECT句のところを下記だけにする感じです。

sql

1max(tbl_test_A.pkey)

「集約関数」なので他のカラムも同時に取得したければgroup byなりなんなりでまとめる必要はあります。
「サンプルデータ」と「欲しい結果」を具体的に提示いただければ具体的なアドバイスも可能です。

投稿2018/11/07 00:27

m.ts10806

総合スコア80850

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

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

m.ts10806

2018/11/07 00:28

inner joinで自身を結合する必要はなさそうです。
silversink

2018/11/07 01:30

ご指摘ありがとうございます。 確かにinner joinでの処理は不要でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問