お世話になります。
現在、最新レコードを抽出し外部結合するSQLを考えているのですが、実現できておりません。
実現できるSQLをご存知の方、いらっしゃいましたら情報を頂けますでしょうか。
# 私の使用しているのは、PostgreSQL8.3となります。
実現したい内容は、以下となります。
1.テーブルAから「名前」でグループ化して最新の「更新日付」のレコードを抽出。
2.1の結果とテーブルBを「名前」で結合。
3.テーブルAの「名前」、「点数」、「更新日付」とテーブルBの「判定」を抽出。
⇒ただしテーブルAに情報がある場合は、テーブルBの判定結果を「0」にして出力。
テーブルA テーブルB
---------------------------- -----------------------
名前| 点数| 更新日付 名前 | 判定
---------------------------- -----------------------
AAA 98 2011/4/1 AAA 0
AAA 60 2011/4/3 BBB 1
BBB 70 2011/4/2 CCC 1
BBB 35 2011/4/4 DDD 1
DDD 98 2011/4/1 EEE 0
EEE 47 2011/4/5 FFF 0
GGG 80 2011/4/6 GGG 1
【出力結果】
---------------------------------------------
名前 | 点数 | 更新日付 | 判定
---------------------------------------------
AAA 60 2011/4/3 0
BBB 35 2011/4/4 0(1⇒0に変更)
CCC NULL NULL 1
DDD 98 2011/4/1 0(1⇒0に変更)
EEE 47 2011/4/5 0
FFF NULL NULL 0
GGG 80 2011/4/6 0(1⇒0に変更)
お手数お掛け致しますが、ご教示のほどよろしくお願い致します。
No.1ベストアンサー
- 回答日時:
PostgreSQL 8.3 ですと、「最新の「更新日付」のレコードを抽出」の箇所でセルフジョインが必要になります。
具体的なSQLはこのような感じです。最新の日付を max() で計算しているので、更新日付のデータ型を date にするか、文字列の場合はゼロ埋め ("2011/04/03") しておいてください。
CREATE TABLE テーブルA (名前 text, 点数 integer, 更新日付 date);
INSERT INTO テーブルA VALUES
('AAA', 98, '2011/4/1'),
('AAA', 60, '2011/4/3'),
('BBB', 70, '2011/4/2'),
('BBB', 35, '2011/4/4'),
('DDD', 98, '2011/4/1'),
('EEE', 47, '2011/4/5'),
('GGG', 80, '2011/4/6');
CREATE TABLE テーブルB (名前 text, 判定 integer);
INSERT INTO テーブルB VALUES
('AAA', 0),
('BBB', 1),
('CCC', 1),
('BBB', 1),
('DDD', 0),
('EEE', 0),
('GGG', 1);
SELECT
名前, 点数, 更新日付,
CASE WHEN max_a.名前 IS NOT NULL THEN 0 ELSE 判定 END AS 判定
FROM
(SELECT 名前, max(更新日付) AS 更新日付 FROM テーブルA GROUP BY 名前) AS max_a
JOIN
テーブルA USING (名前, 更新日付)
RIGHT JOIN テーブルB USING (名前);
お礼が遅くなり申し訳ありません。
ご回答ありがとうございます。
頂いたSQLで実現できました。また、更新日付のデータ型についても了解致しました。
ご協力ありがとうございました。
No.2
- 回答日時:
最新レコードを抽出するのにnot existsを使う方法もありますね。
そこの部分以外はgacky-79さんのSQLをそのまま使わせていただきました。
SELECT
名前, 点数, 更新日付,
CASE WHEN max_a.名前 IS NOT NULL THEN 0 ELSE 判定 END AS 判定
FROM
(SELECT * FROM テーブルA AS A1
WHERE NOT EXISTS(
SELECT * FROM テーブルA AS A2
WHERE A1.名前 = A2.名前 AND A1.更新日付 < A2.更新日付
)) AS テーブルA
RIGHT JOIN テーブルB USING (名前);
お礼が遅くなり申し訳ありません。
ご回答ありがとうございます。
not existsを使用しても実現可能なんですね。性能面も考えて
NO.1の方のとどちらを使用するか検討させて頂きます。
ご協力ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
MAX関数を使ってからLEFT JOINしたいのですが・・
PHP
-
GROUP BYを行った後に結合したい。
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
2つのテーブルで引き算 postgres
-
オラクルでいうところのdescとs...
-
プロシージャとトリガー
-
バキューム処理の実行時間の目安
-
SQLServerでの複数テーブルから...
-
行数をカウントするSQLにつきま...
-
今度同じサークルだった女の子...
-
「テーブルに座って……」という...
-
オラクルのエクスポートについて
-
Accessでの稼働日数計算の方法
-
DELETE文とロックについて
-
会社の飲み会の幹事になり、座...
-
1対1のリレーション(主キー同...
-
データベースの接続に失敗して...
-
男性と2人で飲食店に行きテーブ...
-
MySQLテーブルの結合
-
テーブル(構造)のコピー
-
update文で改行を入れる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLでUPSERTを一度に複数行やる...
-
SQLにて指定日付より前、かつ最...
-
単純なselectが遅くなるのです...
-
PostgreSQLの断片化の状況を確...
-
javaでデータベース上のテーブ...
-
MS Access から PostgreSQL へ...
-
Postgresのデータ領域の拡張に...
-
UPDATE文の更新順序について
-
2つのテーブルで引き算 postgres
-
テーブルを作ろうとしたら。
-
postgres FILLFACTOR 確認方法
-
VIEWのCOPYってできないんですか?
-
reindex と update のデッドロック
-
最新レコードを抽出し外部結合...
-
デットロック回避策(autocommit...
-
PostgreSQL レコードからアイテ...
-
PostgreSQL 8.0.2 の ERROR: r...
-
複数テーブルにまたがるmax
おすすめ情報