回答編集履歴

2

想定される SQL 文を追記

2016/02/11 06:52

投稿

unau
unau

スコア2468

test CHANGED
@@ -5,3 +5,37 @@
5
5
 
6
6
 
7
7
  ご質問のケースで望ましい結果、やりたいことがはっきりわからないので具体的な SQL は書けませんが、考え方としては[同一グループの中で最大のレコードを取得する SQL を書く](http://labs.timedia.co.jp/2014/10/selecting-max-record-in-group-by.html)ということになります。
8
+
9
+
10
+
11
+ ---
12
+
13
+ 追記
14
+
15
+
16
+
17
+ こんな感じになるのかな、というのを書いてみました。Oracle が手元にないので未検証です。また、テーブル定義もわからないので、適当に想像して書いています。
18
+
19
+ ```sql
20
+
21
+ SELECT outer_a.*, outer_b.*, outer_b.年度 * 10 + outer_b.期 AS outer_sortkey
22
+
23
+ FROM table_a AS outer_a
24
+
25
+ INNER JOIN table_b AS outer_b ON outer_a.社員コード = outer_b.社員コード
26
+
27
+ WHERE NOT EXIST (
28
+
29
+ SELECT inner_b.年度 * 10 + inner_b.期 AS inner_sortkey
30
+
31
+ FROM table_a AS inner_a
32
+
33
+ INNER JOIN table_b AS inner b ON inner_a.社員コード = inner_b.社員コード
34
+
35
+ WHERE outer_a.社員コード = inner_a.社員コード
36
+
37
+ AND outer_sortkey < inner_sortkey
38
+
39
+ );
40
+
41
+ ```

1

曖昧な文を補足

2016/02/11 06:52

投稿

unau
unau

スコア2468

test CHANGED
@@ -1,4 +1,4 @@
1
- Oralce は 10 年以上触っていないので忘れましたが、一般的に GROUP BY で集計して集計関数で計算した場合、集計したグループにおける平均値、最大値、最小値などしかわかりません。つまり、どのレコードが最大値だったのか、は集計関数を使ってもわかりません。
1
+ Oralce は 10 年以上触っていないので忘れましたが、SQL においては 一般的に GROUP BY で集計して集計関数で計算した場合、集計したグループにおける平均値、最大値、最小値などしかわかりません。つまり、どのレコードが最大値だったのか、は集計関数を使ってもわかりません。
2
2
 
3
3
  各グループにおける最大値のレコードを特定するためには副問合せが不可欠(のはず)です。
4
4