回答編集履歴

1

sample

2018/06/18 14:07

投稿

yambejp
yambejp

スコア114839

test CHANGED
@@ -1 +1,65 @@
1
1
  できないことは無いですが行番号を最初から調整しないと集計列があわないですよね
2
+
3
+
4
+
5
+ # sample
6
+
7
+ postgreだと動かないかもしれませんが一応sample
8
+
9
+
10
+
11
+
12
+
13
+ - 元データ
14
+
15
+ ```SQL
16
+
17
+ create table user (uid int unique,uname varchar(20),gender varchar(10),birth date);
18
+
19
+ insert into user values
20
+
21
+ (1,'山田','男','1990/01/01'),
22
+
23
+ (2,'鈴木','女','1992/03/31'),
24
+
25
+ (3,'高橋','男','1980/02/21');
26
+
27
+
28
+
29
+ create table gakureki (uid int,row int,gname varchar(20),gakka varchar(20),sdate date,edate date);
30
+
31
+ insert into gakureki values
32
+
33
+ (1,1,'A高校','普通科','2005/04/01','2008/03/31'),
34
+
35
+ (1,2,'B大学','経済学部経済学科','2009/04/01','2013/03/31'),
36
+
37
+ (1,3,'B大学院','経営マネジメント学科','2013/04/01','2015/03/31'),
38
+
39
+ (2,1,'Z高校','普通科','2008/04/01','2011/03/31'),
40
+
41
+ (2,2,'X大学','法学部法律学科','2011/04/01','2015/03/31'),
42
+
43
+ (3,1,'M高校','普通科','1995/04/01','1998/03/31'),
44
+
45
+ (3,2,'N大学','外国語学部英語学科','1998/04/01','2002/03/31');
46
+
47
+ ```
48
+
49
+
50
+
51
+ - 集計
52
+
53
+ ```SQL
54
+
55
+ select * from
56
+
57
+ (select uid,(select max(row)-t1.row+1 from gakureki where t1.uid=uid) as rank,gname,gakka,sdate,edate from gakureki as t1 having rank=1) as t1
58
+
59
+ left join (select uid,(select max(row)-t1.row+1 from gakureki where t1.uid=uid) as rank,gname,gakka,sdate,edate from gakureki as t1 having rank=2) as t2 on t1.uid=t2.uid
60
+
61
+ left join (select uid,(select max(row)-t1.row+1 from gakureki where t1.uid=uid) as rank,gname,gakka,sdate,edate from gakureki as t1 having rank=3) as t3 on t1.uid=t3.uid
62
+
63
+
64
+
65
+ ```